繁体   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