解释Clang动态/静态库链接过程

时间:2015-06-17 12:54:41

标签: ios objective-c compilation clang

我正在构建自己的库,我对最终的可执行链接过程如何工作感到困惑。

我有一个使用CoreLocation标头的 MyLibrary.framework

当我将Mach-o type设置为static时,框架构建没有问题,即使我没有在“链接的框架和库”中链接 CoreLocation.framework 。 / p>

当我将 MyLibrary.framework 链接到我的iOS测试项目时,我必须添加 CoreLocation.framework ,否则我会收到未引用的符号错误。

问题

为什么不构建我的静态库需要引用CoreLocation,为什么构建我的应用程序需要链接到CoreLocation?那里发生了什么?

1 个答案:

答案 0 :(得分:0)

Mecki的回答:

Objective-C categories in static library

很好地解释编译/链接过程。 .a文件是.o文件的(.a)文件。

每个.o文件不仅包含它所拥有的符号,还包含它所需的符号。

只有在可执行链接过程中,链接器才会解析可执行文件中的所有符号,这些符号引用一个引用CoreLocation库的静态库。