我有一个MAIN.EXE和两个库(LIB1和LIB2):链接时有什么办法跳过未使用的库吗?
在MAIN.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
但它没有帮助。所以我的问题是:有没有什么办法(例如链接器标志),我可以用来成功建立main.exe没有lib2?假设我无法修改任何C++源代码。
简短的回答是:没有,没有。 –
假设你正在链接静态库,当链接器与lib1链接并且看到它调用了f4时,它将尝试链接lib2。我认为你需要两个。 – Dan
我认为目标文件格式并不表示所有的依赖关系,所以它不能在链接时告诉'f4'不可以被重复使用。 – Barmar