0
我有一個庫文件(.lib),其中有許多功能。我正在嘗試從中創建一個共享對象。但庫中的符號不在庫中的共享對象中。但是,當我從同一個庫中生成可執行文件時,這些符號是可見的。.lib中的符號不存在於.so
庫有些問題嗎? 我是否需要以適合創建共享對象的格式編譯庫?
我有一個庫文件(.lib),其中有許多功能。我正在嘗試從中創建一個共享對象。但庫中的符號不在庫中的共享對象中。但是,當我從同一個庫中生成可執行文件時,這些符號是可見的。.lib中的符號不存在於.so
庫有些問題嗎? 我是否需要以適合創建共享對象的格式編譯庫?
鏈接器所做的只是從歸檔文件.a
中提取那些可解決未解決符號的文件.o
。
鏈接共享庫並僅將.a
文件傳遞給鏈接程序時,沒有未解析的符號,因此沒有將來自.a
的目標文件拉入共享庫。
要連結的共享庫的目標文件必須被編譯爲位置無關代碼(-fPIC
,.o
文件.a
正常構建沒有這個選項),然後鏈接到一個共享庫。沒有.a
文件是必要的。
另一種選擇是,鏈接.a
文件是使用-Wl,--undefined=<symbol>
鏈接器選項明確取消定義存在於.a
中的符號。但是這並不能很好地擴展,因爲它需要提及包含.a
的每個.o
中的至少一個符號(假設鏈接器完整地提取.o
,而不僅僅是一個符號)。
究竟是.lib文件?一個檔案或共享庫或其他東西?發佈你如何編譯它以及如何構建共享庫和可執行文件。 –
我有一堆make文件。我正在使用這些來構建.lib(檔案)。你能建議如何製作一個.so嗎? –