【问题标题】:Xcode12 - building for iOS Simulator, but linking in object file built for macOS, file 'dir/SomeFile.a' for architecture x86_64Xcode12 - 为 iOS 模拟器构建,但在为 macOS 构建的目标文件中链接,用于架构 x86_64 的文件 'dir/SomeFile.a'
【发布时间】:2021-01-17 00:45:15
【问题描述】:

当我尝试构建大型 iOS 应用程序(混合、swift+objc)时,Xcode 12 中出现链接器错误。该应用程序正在为真实设备构建良好,但当我尝试使用调试配置直接在模拟器中运行时,它会给出链接器错误。

我在其他帖子here 中尝试了所有可能的解决方案,但不幸的是它没有奏效。尽管其他帖子中的错误有所不同。我已经检查了Build for active architectures only 为 YES 用于调试配置和 NO 用于发布配置。

其他帖子错误,

为 iOS 模拟器构建,但在为 iOS 构建的目标文件中链接,用于架构 arm64

我的错误,

为 iOS 模拟器构建,但在为 macOS 构建的目标文件中链接,用于架构 x86_64 的文件

我该如何解决这个问题?我需要在 iOS 真机和模拟器上运行。

【问题讨论】:

  • 你在Build Settings 中检查过Build for active architectures only 吗?
  • @Olha 我检查了Build for active architectures onlyYES 的调试配置和NO 的发布配置。该应用程序正在为真实设备构建良好,但是当我尝试使用调试配置直接在模拟器中运行时,它会给出链接器错误。
  • 这缺少一些可能对回答很重要的信息:我假设您从包含的框架(可能是 cocoapod)中收到此链接器错误?还是您包含的预编译框架/库?正如您所说,您有一个 iOS 应用程序(我猜混合只是指语言),您甚至在其中看到 macOS 拱门也很奇怪。根据您的项目中包含框架的方式,您可能必须自己在自定义构建阶段(使用lipo)将其剥离,但如果没有更多信息,我不能这么说。
  • 我从预编译的 Fat 二进制文件中得到同样的错误,在设备上运行,在模拟器上出现错误,我已经寻找了几个星期的解决方法,但没有成功,第三方库的所有者是不更新它基本上会影响我们的进度

标签: ios xcode linker-errors xcodebuild xcode12


【解决方案1】:

无论您从哪里获得库,都应该请求为 iOS 模拟器编译的库,而不是为 macOS 编译的库,尽管它们具有通过 lipo -info <file> 返回的相同二进制架构。

您可以使用以下命令验证您的静态 (.a) 或动态库 (.dylib) 是否已针对 iOS 模拟器进行编译:

otool -l <path-to-library> | grep platform

输出的含义如下:

  • platform 7 - iOS 模拟器
  • platform 6 - Mac 催化剂
  • platform 4 - watchOS
  • platform 2 - iOS
  • platform 1 - macOS

Hereplatform 的枚举的完整定义。

【讨论】:

  • 这样做我什么也得不到,这是什么意思?我使用的胖二进制文件应该为 iOS Simulator 和 macOS 编译,这就是我猜为什么我有同样的错误,但运行这个 otool 命令没有得到 ant 结果
  • 您所指的胖二进制文件是否位于框架内?如果是这样,cmd LC_BUILD_VERSION 部分不存在于二进制文件中,并且来自它的信息位于框架的 Info.plist 中。
  • 不,它不在框架中,只有两个 .a 文件以旧方式创建。二进制文件的原始生产者显然忙于在两年后创建一个新的,同时将它卖给人们!
  • @Ramin 那么它可能是使用未在二进制文件中指定此信息的旧 clang 版本编译的。并且较新的版本在联动时正在寻找它。您可以尝试做的是通过一些十六进制编辑器自己将此信息添加到二进制文件中。对于您的情况,我想不出其他解决方案。
【解决方案2】:

尝试在 Build Settings 的 User-defined 部分的 VALID_ARCHS 中添加 x86_64。

【讨论】:

    猜你喜欢
    • 2021-01-08
    • 2021-09-24
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 2021-04-28
    • 2022-01-04
    • 2022-07-02
    • 2021-04-24
    相关资源
    最近更新 更多