ios static library体系结构x86_64的未定义符号

时间:2015-04-13 14:02:26

标签: ios static-libraries universal-binary

lipo -info libXxxx.a 胖文件中的体系结构:libXxxx.a是:armv7 i386 arm64

但依赖项目中的编译器给出了链接错误,

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_ClassXXXX", referenced from:
      objc-class-ref in AppDelegate.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我错过了什么吗? 所有lib项目的目标都有架构:标准架构(armv7,arm64) 和有效的架构arm64,armv7,armv7s

在我的lipo命令中制作通用二进制文件时,我正在从iphonesimulator和iphoneos文件夹中解脱。

2 个答案:

答案 0 :(得分:0)

你的主要线索是它说“找不到架构x86_64的符号”而不是“找不到架构i386的符号”。

修复方法是调整构建设置以允许32位构建。

1)在Project Navigator(左侧边栏)中选择项目文件

2)选择项目的目标(刚刚出现的面板中TARGETS下的第一个条目)

3)找到“架构”设置(如果找不到“架构”,请确保选中“全部”)

4)将其从“标准体系结构”更改为“通用”(如果您愿意,可以明确地将其更改为“32位”)

执行此操作后,您应该能够构建。

答案 1 :(得分:0)

您需要在静态库项目中创建包含以下体系结构的通用二进制文件。架构应该包括64位,armv7,armv7s,arm64。

现在当你在终端上执行lipo -info anyStaticLibrary.a时,你应该看到你的胖二进制文件的armv7 armv7s i386 x86_64 arm64架构。

另请注意,使用上述静态库的项目可以使用体系结构的默认设置正常工作。