指令集
对iOS平台,每一代设备都有其对应的指令集。
指令集 | 设备 |
---|---|
armv6 | iPhone,iPhone2,iPhone3G |
armv7 | iPhone 3GS, iPhone 4, iPhone 4S, |
armv7s | iPhone5,iPhone5C |
arm64/armv8 | iPhone 5s, iPhone 6(Plus), iPhone6s(Plus),iPhone7(Plus),iPhone8(Plus),iPhoneX |
机器的指令集都是向下兼容的,因此armv7的指令集可以运行在iPhone5s上,只是效率没有那么高而已。
iOS项目中的配置
也就是配置Build Setting
里的Architectures
选项
Architectures
指定是该APP支持的指令集,新建一个项目,其默认的选项值为Standard architectures(armv7、arm64)
,表示该APP仅支持armv7
和arm64
的指令集。Valid architectures
选项指即将编译的指令集,默认设置为armv6、armv7、arm64
,表示会编译这三个指令集Build Active Architecture Only
选项表示是否指编译当前使用的指令集,默认情况下在Debug时候设置为YES
,以便可以更加高效、快速的调试程序;在Release情况下设置为NO
,以便APP能够在各个机器上都能够一最高的效率运行。因为在Valid architectures
中设置的指令集为armv6、armv7、arm64
,在Release下会为各个指令集编译对应的代码,因此最后的ipa文件体积基本上翻了3倍。
总结
在大多数情况下,在实际的交叉编译过程中只需要编译 armv7和arm64两个指令集下的库,因为armv7到armv7s指令集的变化比较少,而且armv7s的设备并不是特别多,完全可以使用armv7来运行。arm64的变动比较多且设备比较多,需要单独编译出来,以保证这批设备的优质运行。
注:
iOS模拟器没有运行arm指令集,编译运行的是x86指令集,所以,只有在iOS设备上,才会执行设备对应的arm指令集。