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

时间:2010-12-16 17:53:47

标签: ios xcode linker static-linking

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

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

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

错误是:

未定义的符号:
  “_OBJC_CLASS _ $ _ KalViewController”,引自:       libA.a中的objc-class-ref-to-KalViewController(AViewController.o)
  “_OBJC_CLASS _ $ _ KalDate”,引自:       libA.a中的objc-class-ref-to-KalDate(AViewController.o)
ld:未找到符号
collect2:ld返回1退出状态

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

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

1 个答案:

答案 0 :(得分:0)

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