假設我有一個靜態庫libx.a.我如何使這個庫中的一些符號(不是全部)爲總是出現在任何與我的庫的二進制鏈接中?原因是我需要通過dlopen + dlsym使用這些符號。我知道 - 整個存檔鏈接器開關,但它強制從庫存檔的所有目標文件鏈接到生成的二進制文件,這不是我想要的...我如何總是包含來自靜態庫的符號?
到目前爲止的評論(CentOS 5.4,32位)(UPD:本款是錯誤的;我不能重現此問題)
ld main.o libx.a
我想
將愉快地剝離所有非引用的符號,而
ld main.o -L. -lx
將鏈接整個圖書館。這取決於binu的版本然而,新的連接器將能夠從靜態庫中挑選單個對象。
另一個問題是如何在Windows下實現相同的效果?
在此先感謝。任何提示將不勝感激。
似乎是最簡單和最實用的方法,但我相信OP想要一個更優雅的解決方案:) – 2016-02-24 09:58:20
@MottiShneor:簡單實用* *優雅。 ;-)天哪,這必須是我的*最老的* SO帖子之一...... :-D – DevSolar 2016-02-24 10:02:53
我認爲應該有一個鏈接器標誌爲此,類似 - 整體歸檔或類似。我來到這個問題和答案,因爲我現在遭受了相反的問題。我的靜態lib的符號不會「通過」我的Xcode框架(這是一種dylib),我不明白爲什麼。 – 2016-02-26 19:15:36