armv7, armv7s, arm64, i386, x86_64 的区别
概述
平时项目开发中,可能使用第三方提供的静态库 .a ,如果 .a 提供方技术不成熟,使用的时候就会出现问题,例如:
在真机上编译报错:No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386).
在模拟器上编译报错:No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=armv7s, VALID_ARCHS=armv7 armv6).
要解决以上问题,就要了解一下 Apple 移动设备处理器指令集相关的一些细节知识。
1. ARM
ARM处理器,特点是体积小、低功耗、低成本、高性能,所以几乎所有手机处理器都基于ARM,在嵌入式系统中应用广泛。
2. ARM处理器指令集
armv6 | armv7 | armv7s | arm64 都是ARM处理器的指令集,这些指令集都是向下兼容的,例如 armv7 指令集兼容 armv6 ,只是使用 armv6 的时候无法发挥出其性能,无法使用 armv7 的新特性,从而会导致程序执行效率没那么高。
还有两个我们也很熟悉的指令集:i386 | x86_64 是 Mac 处理器的指令集,i386 是针对 intel 通用微处理器32架构的。x86_64 是针对 x86 架构的64位处理器。所以当使用 iOS 模拟器的时候会遇到 i386 | x86_64 ,iOS 模拟器没有 arm 指令集。
总结:
i386 是针对 intel 通用微处理器32位处理器
x86_64 是针对 x86 架构的64位处理器
模拟器32位处理器测试需要 i386 架构
模拟器64位处理器测试需要 x86_64 架构
真机32位处理器需要 armv7 ,或者 armv7s 架构
真机64位处理器需要 arm64 架构
3. 目前iOS移动设备指令集
arm64:iPhone5S | iPhone6 | iPhone6 Plus | iPhone6s | iPhone6s Plus | iPad Air | iPad mini2(iPad mini with Retina Display)
armv7s:iPhone5 | iPhone5C | iPad4(iPad with Retina Display)
armv7:iPhone3GS | iPhone4 | iPhone4S | iPad | iPad2 | iPad3(The New iPad) | iPad mini | iPod Touch 3G | iPod Touch4
armv6 设备: iPhone | iPhone2 | iPhone3G, 第一代、第二代 iPod Touch(一般不需要去支持)