解释 Clang dynamic/static 库链接过程
Explaining Clang dynamic/static library linking process
我正在构建自己的库,但我对最终可执行文件 linking 过程的工作方式感到很困惑。
我有一个使用 CoreLocation header 的 MyLibrary.framework。
当我将 Mach-o type
设置为 static
时,框架构建没有问题,即使我没有 link CoreLocation.framework 在 "Linked Frameworks and Libraries".
当我 link MyLibrary.framework 到我的 iOS 测试项目时,我必须添加 CoreLocation.framework,否则我会收到未引用的符号错误。
问题
为什么构建我的静态库不需要引用 CoreLocation,为什么构建我的应用程序需要 linking 到 CoreLocation?那里发生了什么?
这里是 Mecki 的回答:
Objective-C categories in static library
很好地解释了compiling/linking过程。 .a 文件是 .o 文件的 (.a) 存档。
每个.o文件不仅包含它拥有的符号,还包含它需要的符号。
只有在可执行链接过程中,链接器才会解析可执行文件中的所有符号,这些符号引用静态库,静态库引用CoreLocation库。
我正在构建自己的库,但我对最终可执行文件 linking 过程的工作方式感到很困惑。
我有一个使用 CoreLocation header 的 MyLibrary.framework。
当我将 Mach-o type
设置为 static
时,框架构建没有问题,即使我没有 link CoreLocation.framework 在 "Linked Frameworks and Libraries".
当我 link MyLibrary.framework 到我的 iOS 测试项目时,我必须添加 CoreLocation.framework,否则我会收到未引用的符号错误。
问题
为什么构建我的静态库不需要引用 CoreLocation,为什么构建我的应用程序需要 linking 到 CoreLocation?那里发生了什么?
这里是 Mecki 的回答:
Objective-C categories in static library
很好地解释了compiling/linking过程。 .a 文件是 .o 文件的 (.a) 存档。
每个.o文件不仅包含它拥有的符号,还包含它需要的符号。
只有在可执行链接过程中,链接器才会解析可执行文件中的所有符号,这些符号引用静态库,静态库引用CoreLocation库。