【问题标题】:Explaining Clang dynamic/static library linking process解释 Clang 动态/静态库链接过程
【发布时间】:2015-06-17 12:54:40
【问题描述】:

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

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

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

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


问题

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


【问题讨论】:

    标签: ios objective-c compilation clang


    【解决方案1】:

    这里是 Mecki 的回答:

    Objective-C categories in static library

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-15
      • 2015-07-10
      • 1970-01-01
      • 1970-01-01
      • 2020-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多