ios 静态库未定义体系结构符号 x86_64

ios static library Undefined symbols for architecture x86_64

lipo-信息libXxxx.a fat 文件中的体系结构: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 文件夹中进行 lipo。

您的主要线索是 "symbol(s) not found for architecture x86_64" 而不是 "symbol(s) not found for architecture i386"。

解决方法是调整构建设置以允许 32 位构建。

1) Select 您在项目导航器(左侧边栏)中的项目文件

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

3) 找到 "Architectures" 设置(如果找不到 "Architectures",请确保选择 "All")

4) 将其从 "Standard Architectures" 更改为 "Universal"(如果您愿意,也可以显式“32 位”)

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

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

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

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