ios - 通过交叉引用多个静态库与 iOS 应用程序链接错误

标签 ios xcode linker static-linking

我正在将一个 Xcode iPhone 项目拆分为多个较小的项目以实现代码重用。 结构如下所示:

+------------+
|    App     |
+------------+
      |
      +------------------+
      |                  |
+--------------+ +--------------+
| Static Lib A | | Static Lib B |
+--------------+ +--------------+
        |                |
        +----------------+
                |
         +--------------+  +----------------+
         | Static Lib Z |--| Static Lib KAL |
         +--------------+  +----------------+

一切都正确编译,但一旦链接应用程序,链接器就无法找到 KAL(开源日历库)库的 2 个符号。 每个库都有一个交叉引用,所有文件都添加到“链接二进制文件与库”构建阶段。

错误是:

undefined symbol :
“_OBJC_CLASS_$_KalViewController”,引用自: libA.a(AViewController.o) 中的 objc-class-ref-to-KalViewController
“_OBJC_CLASS_$_KalDate”,引用自: libA.a(AViewController.o) 中的 objc-class-ref-to-KalDate
ld: 找不到符号
collect2: ld 返回 1 退出状态

我在 LibA 的 AViewController 中使用了 LibZ 的一个类,而他又在 LibKAL 中使用了一个类。

PS:A和B的分离只是因为不是每一个App的构建都需要两者提供的功能。

最佳答案

好吧,就像许多人一样,我花了几个晚上试图解决这个问题,我设法让它在放置后几乎立即工作。
问题是,当我添加对库项目的引用时,Xcode 将项目本身添加为依赖项,而不是存档文件。这是链接器(显然)找不到符号的原因。

关于ios - 通过交叉引用多个静态库与 iOS 应用程序链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4463829/

相关文章:

ios - 带有静态注释的 MKMapView

ios - 使用 case switch 而不是多个 if 语句来处理错误

objective-c - iOS 应用程序更新,如果用户跳过更新会发生什么

swift - 无法从 firebase 实时数据库获取/读取数据到 UITableViewController

c# - 从 C# 中列出非 .NET DLL 函数

代码:: block 错误:ld 返回 1 退出状态

ios - 急切加载解析当前用户

Xcode 快速索引永远

ios - 来自 XCODE 6 GM 的 symbolicatecrash

ios - 将 OpenCV 与 MonoTouch 链接返回 "Undefined symbols for architecture i386"错误