我正在构建自己的库,我对最终的可执行链接过程如何工作感到困惑。
我有一个使用CoreLocation标头的 MyLibrary.framework 。
当我将Mach-o type
设置为static
时,框架构建没有问题,即使我没有在“链接的框架和库”中链接 CoreLocation.framework 。 / p>
当我将 MyLibrary.framework 链接到我的iOS测试项目时,我必须添加 CoreLocation.framework ,否则我会收到未引用的符号错误。
为什么不构建我的静态库需要引用CoreLocation,为什么构建我的应用程序需要链接到CoreLocation?那里发生了什么?
答案 0 :(得分:0)
Mecki的回答:
Objective-C categories in static library
很好地解释编译/链接过程。 .a文件是.o文件的(.a)文件。
每个.o文件不仅包含它所拥有的符号,还包含它所需的符号。
只有在可执行链接过程中,链接器才会解析可执行文件中的所有符号,这些符号引用一个引用CoreLocation库的静态库。