簡體   English   中英

靜態庫與動態庫中的符號解析

[英]Symbol resolution in static vs dynamic libraries

有一個免費的軟件項目,它會構建一些靜態c ++庫,然后將它們鏈接以生成二進制文件。 我想將庫分離為.so文件以進行動態鏈接(這樣其他項目可能會使用lib)。 一個庫可以很好地構建,但是當我嘗試鏈接它時,會出現“未定義引用”錯誤。

這些很容易跟蹤和修復(代碼在.h文件中引用了這些方法,但相應的.cc文件未包含在Makefile編譯命令中)。 但是,我想知道為什么,作為一個一般性的問題,為什么一個庫可以像靜態庫一樣很好地鏈接而不能像動態庫那樣鏈接。 在一種情況下g ++和ld會做什么,而在另一種情況下又不會做什么?

非常感謝。

使用ar創建的靜態庫只是一堆目標文件。 ar是一個非常簡單的存檔器。 鏈接時沒有解決依賴關系,請參見ar的手冊頁。

另一方面, 共享對象或稱為動態庫的動態庫則與眾不同。 它們實現ELF二進制格式並具有復雜的規則集。 它們還具有初始化代碼,並且某些依賴項在鏈接時已解決。 有關更深入的介紹,請參見http://www.akkadia.org/drepper/dsohowto.pdfhttp://www.akkadia.org/drepper/goodpractice.pdf

但是當我嘗試鏈接它時,出現“未定義引用”錯誤。

向我們顯示您的鏈接命令。 鏈接共享庫時,通常不會出現“未定義的引用”錯誤,因為共享庫(默認情況下) 允許具有未解析的符號。

還是當您針對共享庫鏈接最終的可執行文件時,就意味着出現“未定義的引用”錯誤?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM