【问题标题】:Why does the iOS simulator require i386 and x86_64 symbols even though I'm on an x86_64 system only?为什么即使我只在 x86_64 系统上,iOS 模拟器也需要 i386 和 x86_64 符号?
【发布时间】:2015-03-17 23:45:46
【问题描述】:

我正在尝试让一个在模拟器上运行的应用程序之前遇到过一些问题。我们没有为i386 构建的libjpeg.a,但它确实有x86_64。这是剩下的唯一依赖项,但我想知道如果我在 x86_64 mac 上运行,为什么我实际上需要 i386 符号。

【问题讨论】:

    标签: ios-simulator x86-64 i386


    【解决方案1】:

    iOS 模拟器可以在 32 位和 64 位模式下运行您的应用。这使您可以解决很多 64 位问题,并确保它已为 armv7 和 arm64 做好准备。为此,它会针对 i386 和 x86_64 编译您的应用,并需要两种架构的库。

    【讨论】:

    • 谢谢,是的,我在发布后才发现这一点。我想我至少能够在没有 32 位符号的情况下部署到 64 位虚拟目标,并且也许 Xcode 在部署到 32 位虚拟目标时只会尝试链接 32 位。与此同时,我通过从构建设置中删除 arm7 来解决它。尽管如此,你是正确的,应该得到正确的答案。
    【解决方案2】:

    实际上 i386 架构适用于 iPhone 模拟器,而 x86_64 架构适用于 iPad 模拟器,两者都兼容 32 位和 64 位。

    【讨论】:

    • 能否提供出处?
    • 我不认为这是正确的。有 64 位兼容版本的 iPhone 模拟器。
    【解决方案3】:

    iOS 应用需要在许多不同的架构上运行:

    arm7: Used in the oldest iOS 7-supporting devices
    arm7s: As used in iPhone 5 and 5C
    arm64: For the 64-bit ARM processor in iPhone 5S
    i386: For the 32-bit simulator
    x86_64: Used in 64-bit simulator
    

    【讨论】:

    • 我知道不同的架构。然而,我的问题更多的是关于为什么构建两种架构对于模拟器构建来说都是必要的特殊情况。原因似乎有很多(例如,您的应用程序对 iPad 和 iPhone 是通用的,但 Xcode SDK 实际上使用较旧的 32 位架构来模拟较旧的环境,因为它们尚未更新到 64 位)。
    【解决方案4】:

    虽然这几天我尝试运行Fastlane来获取iOS屏幕截图,但我发现了同样的情况:因为有.a库只包含x86_64架构,但没有i386架构,然后我得到了这个错误:

    Undefined symbol(s) for architecture i386
    

    这是在带有iOS 11.4iPhone 8 模拟器上运行的。

    但您可以强制模拟器仅在64-bit32-bit 上运行,如下所示:

    Project -> Architectures -> set the value as:$(ARCHS_STANDARD_32_BIT) or $(ARCHS_STANDARD_64_BIT)
    

    【讨论】:

      猜你喜欢
      • 2014-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-05
      • 1970-01-01
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      相关资源
      最近更新 更多