我有一個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