[英]Explaining Clang dynamic/static library linking process
我正在构建自己的库,并对最终的可执行文件链接过程的工作方式感到困惑。
我有一个使用CoreLocation标头的MyLibrary.framework 。
当我将Mach-o type
设置为static
,即使没有在“链接的框架和库”中链接CoreLocation.framework ,框架也可以毫无问题地构建。
当我将MyLibrary.framework链接到我的iOS测试项目时,必须添加CoreLocation.framework ,因为否则会出现未引用符号错误。
为什么构建我的静态库不需要引用CoreLocation,为什么构建我的应用程序需要链接到CoreLocation? 那里发生了什么?
梅基的答案在这里:
很好地解释了编译/链接过程。 .a文件是.o文件的(.a)行。
每个.o文件不仅包含其具有的符号,还包含其所需的符号。
仅在可执行文件链接过程中,链接程序才会解析可执行文件中的所有符号,该文件引用了静态库,而静态库引用了CoreLocation库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.