【问题标题】:ios static library Undefined symbols for architecture x86_64ios静态库x86_64架构的未定义符号
【发布时间】:2015-06-18 21:03:44
【问题描述】:

lipo -info 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-ing。

【问题讨论】:

  • 因为您同时为 iphonesimulator 和 iphoneos 文件夹创建 fat 文件是正确的,但它不支持 x86_64 架构,请参阅发布的答案

标签: ios static-libraries universal-binary


【解决方案1】:

您的主要线索是它显示“未找到架构 x86_64 的符号”而不是“未找到架构 i386 的符号”。

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

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

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

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

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

完成此操作后您应该能够构建。

【讨论】:

  • 在 Xcode 6.2 中,是否有通用选项?我只有标准的拱门。但在我设置的所有有效拱门中:arm64、armv7、armv7s、x86_64、i386
【解决方案2】:

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

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

还要注意,使用上述静态库的项目可以在架构的默认设置下正常工作。

【讨论】:

    猜你喜欢
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    相关资源
    最近更新 更多