【问题标题】:Error when trying to link fat binary with 64-bit simulator target尝试将胖二进制文件与 64 位模拟器目标链接时出错
【发布时间】:2014-03-29 19:50:53
【问题描述】:

我有一个用于 iOS 和 OS X 的静态库 lipo'd,具有 5 种架构(x86_64、i386、armv7、armv7s、arm64)。

  • x86_64 架构是使用 macosx SDK 构建的
  • i386 架构是使用 iphonesimulator SDK 构建的
  • ARM 架构是使用 iphoneos SDK 构建的

当我尝试在示例应用程序中链接生成的库时,它在为设备或 32 位 iOS 模拟器目标构建时有效。但是当我尝试为 64 位 iOS 模拟器目标构建它时,我收到了链接器错误:

ld: framework not found CoreServices for architecture x86_64

如果我从 fat 库中删除 x86_64 切片,它适用于所有设备和模拟器。

我认为这是因为链接器更喜欢 x86_64 架构,如果它适用于 64 位模拟器。但由于它是为 macosx SDK 编译和链接的,因此它以某种方式对 OS X 依赖项进行了编码。

我尝试为 iphonesimulator SDK 添加第二个 x68_64 切片,但 lipo 不允许。我还试图找到一种方法让模拟器使用 i386 架构,即使是 64 位构建,但到目前为止还没有运气。

如果绝对必要,我可以创建 2 个二进制文件来解决这个问题,但我更愿意将它们放在一个文件中。有没有办法做到这一点?

【问题讨论】:

  • 我认为您需要 2 个二进制文件,因为 osx 和 ios 模拟器架构无法区分。

标签: ios xcode macos linker fat-binaries


【解决方案1】:

我只为 iOS 设备和模拟器构建它来解决它。 iOS Simulator SDK 的 64 位切片同样适用于 iOS 和 OS X 目标,前提是您不需要任何其他框架,除了 OS X 和 iOS 之间共享的框架(在我的情况下仅为 Foundation)。

【讨论】:

    【解决方案2】:

    项目和 Pod:

    Build Settings ---> Link Frameworks 自动将YES改为NO,并重建静态库,就可以了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-24
      • 2014-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多