2016-12-30 72 views
0

我有一個庫文件(.lib),其中有許多功能。我正在嘗試從中創建一個共享對象。但庫中的符號不​​在庫中的共享對象中。但是,當我從同一個庫中生成可執行文件時,這些符號是可見的。.lib中的符號不​​存在於.so

庫有些問題嗎? 我是否需要以適合創建共享對象的格式編譯庫?

+0

究竟是.lib文件?一個檔案或共享庫或其他東西?發佈你如何編譯它以及如何構建共享庫和可執行文件。 –

+0

我有一堆make文件。我正在使用這些來構建.lib(檔案)。你能建議如何製作一個.so嗎? –

回答

0

鏈接器所做的只是從歸檔文件.a中提取那些可解決未解決符號的文件.o

鏈接共享庫並僅將.a文件傳遞給鏈接程序時,沒有未解析的符號,因此沒有將來自.a的目標文件拉入共享庫。

要連結的共享庫的目標文件必須被編譯爲位置無關代碼(-fPIC.o文件.a正常構建沒有這個選項),然後鏈接到一個共享庫。沒有.a文件是必要的。

另一種選擇是,鏈接.a文件是使用-Wl,--undefined=<symbol>鏈接器選項明確取消定義存在於.a中的符號。但是這並不能很好地擴展,因爲它需要提及包含.a的每個.o中的至少一個符號(假設鏈接器完整地提取.o,而不僅僅是一個符號)。

相關問題