什么是CPU架构
CPU架构是CPU厂商给属于同一系列的CPU产品定的一个规范,主要目的是为了区分不同类型CPU的重要标示。
目前市面上的CPU分类主要分有两大阵营,一类是复杂指令集(CISC)CPU,另一类是精简指令集(RISC)CPU。我们今天要讨论的ARM指令集就属于精简指令集(RISC)CPU。
ARM处理器
ARM处理器是英国Acorn有限公司设计的低功耗成本的第一款RISC微处理器。全称为Advanced RISC Machine。
ARM处理器因其低功耗和尺寸小而闻名,iPhone的处理器全部都基于ARM。
我们经常见到的armv7 | armv7s | arm64都是ARM处理器的指令集。
指令集应用于开发有如下特点:
- 所有指令集原则上向下兼容。
- Xcode的模拟器是运行在电脑上的,所以iPhone模拟器并没有使用ARM指令集,而是使用的X86(64为处理器)或者i386(32位处理器)。
- 通过Xcode打包时,会为支持的所有的指令集编译出对应的指令集代码的数据包,所以工程支持的指令集越多,生成的二进制包就越大。
指令集对应的机型
- 模拟器32位处理器测试需要i386架构。
- 模拟器64位处理器测试需要x86_64架构。
- 真机32位处理器需要armv7,或者armv7s架构。
- 真机64位处理器需要arm64架构。
arm64e : iPhone 12 | iPhone 12 Mini | iPhone 12 Pro | iPhone 12 Pro Max
arm64e : iPhone 11 | iPhone 11 Pro | iPhone 11 Pro Max
arm64e : iphone XS | iphone XS Max | iphoneXR
arm64 : iPhone 8 | iPhone 8 Plus | and iPhone X
arm64 : iPhone 7 | iPhone 7 Plus | iPad (2018)
arm64 : iPhone 6S | iPhone 6S Plus
arm64 : iPhone 6 | iPhone 6 Plus
arm64 : iPhone 5S
armv7s :iPhone5 | iPhone5C | iPad4(iPad with Retina Display)
armv7 :iPhone4 | iPhone4S | iPad | iPad2 | iPad3(The New iPad) | iPad mini | iPod Touch 3G | iPod Touch4
相关的Build Setting
Build Settings
中搜索Architecture
,可以看到如下图的设置项:
- Architectures
指定当前Target
被编译时支持的指令集的列表,如果指定了多个架构,机会生成多个架构需要的二进制文件。 - Build Active Architecture Only
指定是否只编译当前连接设备所支持的指令集。
默认Debug
时为YES
,Release
时为NO
。设置为YES
时,编译后只生成当前连接设备所支持的指令集代码,编译速度更快。 - Excluded Architectures
指定当前Target
被编译时拒绝接纳的指令集列表,编译后最终生成的二进制文件支持的指令集是Architectures
减去Excluded Architectures
。
其中Architecture
的默认值是$(ARCHS_STANDARD)
,该值具体如下:
请参照Xcode Build Settings Reference
在iPhone上时支持armv7
和arm64
,模拟器上支持i386
和x86_64
,Mac上支持x86_64
。
相关错误
No architectures to compile for (...)
看到这样的异常,就是架构上的不支持了,我们需要根据括号内的提示排查问题。