为什么iOS模拟器需要i386和x86_64符号,即使我只在x86_64系统上?

Joe*_*son 20 x86-64 i386 ios-simulator

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

Var*_*der 28

iOS模拟器可以在32位和64位模式下运行您的应用程序.这可以让你解决很多64位问题,并确保它已经为armv7和arm64做好了准备.为此,它会为i386和x86_64编译您的应用程序,并且需要两个体系结构的库.

  • 谢谢,是的,我在发帖后就发现了这一点。我认为我至少能够部署到没有 32 位符号的 64 位虚拟目标,并且也许 Xcode 在部署到 32 位虚拟目标时只会尝试链接 32 位。与此同时,我通过从构建设置中删除arm7来解决这个问题。尽管如此,你是对的,应该得到正确的答案。 (2认同)

Nai*_*hta 13

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
Run Code Online (Sandbox Code Playgroud)


Sye*_*man 11

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

  • 我不认为这是正确的。有 64 位兼容版本的 iPhone 模拟器。 (2认同)

ife*_*goo 8

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

Undefined symbol(s) for architecture i386
Run Code Online (Sandbox Code Playgroud)

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

但是您可以强制模拟器仅运行64-bit或仅运行32-bit如下:

Project -> Architectures -> set the value as:$(ARCHS_STANDARD_32_BIT) or $(ARCHS_STANDARD_64_BIT)
Run Code Online (Sandbox Code Playgroud)