簡體   English   中英

共享庫中未定義的外部符號

[英]Undefined external symbol in shared library

我最近在iOS SDK4.3的System.B.dylib庫上運行了nm -m -p -g ,很驚訝地發現很多符號都標記為(undefined) (external) 為什么以及何時將未定義的符號標記為外部? 我可以理解一個標記為lazyweak的未定義外部符號,但這些不是。 許多pthread_xxx函數都屬於這一類。 但是,當我鏈接到此庫時,所有符號都會被解析。 pthread_xxx符號在\\usr\\lib\\system文件夾中的一個庫中定義,因此我假設他們從那里滿意。 鏈接期間如何工作?

我已經有一段時間了,因為我是一名nmld C編碼忍者,但我認為這只意味着還有其他一些鏈接的庫。

通常這是動態鏈接的工作原理。 如果您是nm的System.B的靜態存檔,您將不會觀察到此行為。 它自己的System.B.dylib不會做太多事情; 除非你把它作為動態和靜態庫的集合集的一部分,它使用它的函數。 如果你現在嘗試編譯你的最終二進制文件但是省略了庫路徑'/ usr / lib / system'那么你的鏈接器將會犯規並退出並顯示錯誤,告訴你它找不到對pthread_XXX()的引用(使用上面的例子) )。 在二進制文件的最終組裝期間,它需要確保它知道所使用的每個函數的位置。

HTH

暫無
暫無

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

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