关于architecture以及xcode编译
xcode编译选项中,有几个关于architecture的选项,xcode要编译的目标架构是valid architecture和active architecture的交集。xcode会对所有支持的架构进行编译,生成所有的.o文件链接成.a。不同架构的.a最后再合在一起,形成最后的.a 或二进制文件。

Architecture 、Vaild Architectures、 Build Active Architectures Only
- Architecture
指定工程被编译成支持哪些指令集类型,而支持的指令集越多,就会编译出很多个指令集代码的数据包,对应生成二进制包就越大,也就是ipa包越大。

- Vaild Architectures
限制可能被支持指令集的范围,就是xcode编译出来的二进制包类型最终从这些类型产生,而编译出哪些指令集的包,将由Architectures与Valid Architectures这些交集来确定。
- Build Active Architectures Only
只对当前连接设备所支持的指令集编译,当设置为YES时,是为了debug编译的速度更快,它只会编译当前的architecture版本,当设置为NO时,会编译所有的版本,所以一般debug设置为YES,release设置为NO,以适应不同设备。

1. armv7,armv7s,arm64,i386,x86_64这些都是处理器的指令集
2. i386,x86_64为是Mac处理器的指令集(模拟器)
3. armv7,armv7s,arm64是ARM处理器的指令集(真机)
ARM处理器,特点是体积小、低功耗、低成本、高性能,所以几乎所有手机处理器都基于ARM,在嵌入式系统中应用广泛。
指令集

模拟器32位处理器测试需要i386架构 (5c 4s 4... )
模拟器64位处理器测试需要x86_64架构,(5s, 6, 6s, 7, 7plus, 8, 8plus, iphone X)
真机32位处理器需要armv7,或者armv7s架构, (5c 4s 4... )
真机64位处理器需要arm64架构。(5s, 6, 6s, 7, 7plus, 8, 8plus, iphone X)
iPhone中5s以下,5c 4s 4...都是32位处理器,以上都为64位处理器。
用命令查看静态库支持的指令集
lipo -info 静态库
网友评论