链接时有没有办法跳过未使用的库
Is there any way to skip unused libraries when linking?
我有一个main.exe和两个库(lib1和lib2):
主要.exe:
extern void f3();
int main() {
f3();
}
在 lib1.cpp 中:
extern void f4();
void f2() {
f4();
}
void f3() {
}
在 lib2.cpp 中:
void f4() {
}
所以从理论上讲,我只需要lib1就可以成功构建main.exe因为只有f3()
被main()
调用。
但是我在 gcc 和 MSVC 下发现,我也必须有 lib2,否则链接器报告它找不到f4()
。
我已经尝试过链接器标志--as-needed
但它没有帮助。所以我的问题是:有什么方法(例如链接器标志)可以用来在没有 lib2 的情况下成功构建 main.exe?假设我无法修改任何C++源代码。
标志
--as-needed
不起作用,因为链接器尝试解析对象文件中存在的任何未定义的标识符。
基本上你必须包含 f4() 的实现。但是,出于任何原因,您不想向链接器提供lib2
,您可以创建一个虚拟lib2
其中包含f4
的虚拟实现(使用空的 f4 函数制作一个 cpp 文件就可以了)。
例如:
gcc main.cpp lib1.o lib2_dummy.cpp -o main.exe
您可以将 lib1.cpp 拆分为两个源模块 lib1a.cpp 和 lib1b.cpp,并将这两个模块都包含在 lib1 库中。 然后链接器将能够在不导入f2
的情况下导入f3
,因此不需要lib2。
lib1a.cpp
extern void f4();
void f2() {
f4();
}
lib1b.cpp
void f3() {
}
相关文章:
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 对于C++中使用智能指针的指针算术限制,有没有一种变通方法
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 有没有办法提示用户使用哪种数据类型作为模板 c++
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- 有没有办法使用递归函数找到数组中最小值的 INDEX?C++
- 有没有办法通过使用十进制 ASCII 代码自动类型扣除来获取字符?
- 使用 Clang++ 有没有办法将文件作为命名空间等包含?
- 有没有办法使用 c++ 实时阅读文本?
- 有没有办法一次声明相同类型的多个对象,并通过一个表达式立即使用相同的右值初始化它们?
- 有没有办法捕获 STL 函数未被赋予正确参数的异常?
- 有没有办法使用 strcpy 将字符串数组复制到另一个字符串或其他数组中?
- 有没有办法在不使用 getline() 的情况下从.csv文件中读取?
- 有没有办法实现 fmu 导出到基于 c++ 的仿真软件以使用 fmi?
- 有没有办法在C ++中检测汉字?(使用增强)
- 有没有办法在不使用 #ifdef 的情况下不编译发布版本中的单元测试函数体?
- 有没有办法在C++将字符串与开关语句一起使用?
- qt-creator 中有没有办法检查未使用/死的代码
- 有没有办法在make命令中找到未使用的定义和结构