[英]Undefined external symbol in shared library
我最近在iOS SDK4.3的System.B.dylib
庫上運行了nm -m -p -g
,很驚訝地發現很多符號都標記為(undefined) (external)
。 為什么以及何時將未定義的符號標記為外部? 我可以理解一個標記為lazy
或weak
的未定義外部符號,但這些不是。 許多pthread_xxx
函數都屬於這一類。 但是,當我鏈接到此庫時,所有符號都會被解析。 pthread_xxx
符號在\\usr\\lib\\system
文件夾中的一個庫中定義,因此我假設他們從那里滿意。 鏈接期間如何工作?
我已經有一段時間了,因為我是一名nm
和ld
C編碼忍者,但我認為這只意味着還有其他一些鏈接的庫。
通常這是動態鏈接的工作原理。 如果您是nm的System.B的靜態存檔,您將不會觀察到此行為。 它自己的System.B.dylib不會做太多事情; 除非你把它作為動態和靜態庫的集合集的一部分,它使用它的函數。 如果你現在嘗試編譯你的最終二進制文件但是省略了庫路徑'/ usr / lib / system'那么你的鏈接器將會犯規並退出並顯示錯誤,告訴你它找不到對pthread_XXX()的引用(使用上面的例子) )。 在二進制文件的最終組裝期間,它需要確保它知道所使用的每個函數的位置。
HTH
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.