【发布时间】:2015-03-17 23:45:46
【问题描述】:
我正在尝试让一个在模拟器上运行的应用程序之前遇到过一些问题。我们没有为i386 构建的libjpeg.a,但它确实有x86_64。这是剩下的唯一依赖项,但我想知道如果我在 x86_64 mac 上运行,为什么我实际上需要 i386 符号。
【问题讨论】:
标签: ios-simulator x86-64 i386
我正在尝试让一个在模拟器上运行的应用程序之前遇到过一些问题。我们没有为i386 构建的libjpeg.a,但它确实有x86_64。这是剩下的唯一依赖项,但我想知道如果我在 x86_64 mac 上运行,为什么我实际上需要 i386 符号。
【问题讨论】:
标签: ios-simulator x86-64 i386
iOS 模拟器可以在 32 位和 64 位模式下运行您的应用。这使您可以解决很多 64 位问题,并确保它已为 armv7 和 arm64 做好准备。为此,它会针对 i386 和 x86_64 编译您的应用,并需要两种架构的库。
【讨论】:
实际上 i386 架构适用于 iPhone 模拟器,而 x86_64 架构适用于 iPad 模拟器,两者都兼容 32 位和 64 位。
【讨论】:
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
【讨论】:
虽然这几天我尝试运行Fastlane来获取iOS屏幕截图,但我发现了同样的情况:因为有.a库只包含x86_64架构,但没有i386架构,然后我得到了这个错误:
Undefined symbol(s) for architecture i386
这是在带有iOS 11.4 的iPhone 8 模拟器上运行的。
但您可以强制模拟器仅在64-bit 或32-bit 上运行,如下所示:
Project -> Architectures -> set the value as:$(ARCHS_STANDARD_32_BIT) or $(ARCHS_STANDARD_64_BIT)
【讨论】: