ios - 尝试将胖二进制文件与 64 位模拟器目标链接时出错

标签 ios xcode macos linker fat-binaries

我有一个针对 iOS 和 OS X 的 lipo 静态库,具有 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 不允许。我还试图找到一种方法让模拟器即使在 64 位构建中也使用 i386 架构,但到目前为止还没有成功。

如果绝对必要,我可以创建 2 个二进制文件来解决这个问题,但我真的更喜欢将它们放在一个文件中。有办法实现吗?

最佳答案

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

关于ios - 尝试将胖二进制文件与 64 位模拟器目标链接时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22736056/

相关文章:

ios - 未安装GoogleMobileAds SDK iOS的GADInvalidInitializationException

ios - 单击 xcode/swift 时更改按钮的不透明度

ios - 如何使用 UIAutomation 从 UIImagePickerController 选择图像

ios - 我的 ios 开发者帐户无法再访问 “Certificates, Identifiers & Profiles”

ios - 架构 i386 的 undefined symbol : "_OBJC_CLASS_$_MFMailComposeViewController"

iOS 在 drawRect 内容上使用 CGAffineTransformMakeScale 缩放

ios - iOS 客户端中的 XMPP 框架 XEP-0136 实现

ios - Linux 上读取/转储 MachO 文件的工具?

objective-c - Mac 显示/删除自定义 URL 方案

c - 如何在 macOS 的 C/C++ 中获取产品名称/版本(即获取 "Mac OS"和 "10.12.5")