【问题标题】:Adding static library to project >> Undefined symbols将静态库添加到项目 >> 未定义的符号
【发布时间】:2014-08-22 08:03:22
【问题描述】:

我创建了一个静态库,我将它添加到 XCode 中同一工作区中的另一个项目中。该库构建良好,适用于模拟器和实际设备。

所有错误都与库中的类有关,因此与另一个框架无关。

我收到两个未定义符号错误,它们都涉及“_OBJC_CLASS__$_Campaign” 当我为实际设备构建时,我得到 Undefined symbols for architecture armv7s 当我为模拟器构建时,我得到 Undefined symbols for architecture i386

我尝试创建一个胖库:同样的问题。 我打开和关闭了“仅为活动架构构建”:没有帮助。 我删除并重建了 XCode 工作区:没有解决方案。

我很确定我将正确的 .m 文件添加到库的“编译源”中,并且通过“将二进制文件与库链接”正确地将库添加到了另一个项目中。我还尝试将 .lib 拖到 Frameworks 文件夹中。

我在项目中添加了.lib的头文件。

我会很高兴有任何建议!

【问题讨论】:

  • 你能发帖Campaign.h吗?

标签: ios xcode


【解决方案1】:

问题可能是由于您的静态库从另一个库中导入了某些内容。

您需要找出确切缺少的符号并添加定义它们的库。构建日志输出在这方面应该很有帮助。

编辑:根据 cmets 中的讨论,问题是由于 Campaign 类没有实现的脂肪引起的。如果没有实现,编译器不会生成类,这会导致链接错误。没有编译时错误,因为虽然声明了类的 interface

您应该在单独的Campaign.m 文件或现有文件之一中添加此类实现。

【讨论】:

  • 仅 CoreLocation,我已将其添加到静态库“Link binary with libraries”中。我得到两个未定义的符号错误,它们都引用“_OBJC_CLASS_$_Campaign”
  • 是应用使用的“Campaign”类还是静态库?该类实际上在某处定义吗?
  • 它是应用程序和库都使用的 NSObject 子类。它在 Campaign.h 中定义。没有 Campaign.m,因为它只是一个具有一些属性的 NSObject。我还在应用程序中添加了 Campaign.h 标头。
  • 即使它只是带有属性的 NSObject 子类,您也必须添加 Campaign.m(或者更准确地说,Campaign@implementation 部分)。否则编译器不会生成类,你会得到链接器错误(你已经这样做了)。
  • 就是这样!我知道它会是那样的。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-09
  • 1970-01-01
  • 2010-10-20
  • 1970-01-01
  • 2018-09-29
  • 1970-01-01
相关资源
最近更新 更多