iOS基础篇

ios arm64 x86_64等指令集

2019-03-14  本文已影响0人  fordG

32位和64位处理系统

模拟器32位处理器测试需要i386架构,
模拟器64位处理器测试需要x86_64架构,
真机32位处理器需要armv7,或者armv7s架构,
真机64位处理器需要arm64架构

手机arm处理器不同,导致需要区分arm指令集, 都可以向下兼容
项目中使用的第三方库肯定需要支持64位系统
Armv6、armv7、armv7s、arm64都是arm处理器的指令集,所有指令集原则上都是向下兼容的,如iPhone4S的CPU默认指令集为armv7指令集,但它同时也兼容armv6指令集,只是使用armv6指令集时无法充分发挥其性能,即无法使用armv7指令集中的新特性,同理,iPhone5的处理器标配armv7s指令集,同时也支持armv7指令集,只是无法进行相关的性能优化,从而导致程序的执行效率没那么高


image.png

制作静态库.a是指令集选择
现在回归到正题,如何制作一个“没有问题”的.a静态库,通过以上信息了解到,当我们做App的时候,为了追求高效率,并且减小包的大小,Build Active Architecture Only设置成YES,Architectures按Xcode默认配置就可以,因为arm64向前兼容。但制作.a静态库就不同了,因为要保证兼容性,包括不同iOS设备以及模拟器运行不出错,所以结合当前行业情况,要做到最大的兼容性。
ValidArchitectures设置为:armv7|armv7s|arm64|i386|x86_64
Architectures设置不变(或根据你需要): armv7|arm64
然后分别选择iOS设备和模拟器进行编译,最后找到相关的.a进行合包:

合并两个不同构架的库文件

$ lipo -create /Users/xxxxxx/lib/libv7.a  /Users/xxxxxx/lib/lib64.a  -output /Users/xxxxxx/lib/lib.a
指令说明: lipo -create 库文件1一完整路径 库文件2完整路径 -output 输出的文件名路径

从某个库文件中提起出指定构架的库文件

Desktop$ lipo -thin arm64 debugserver -output debugserver2
指令说明:lipo -thin 对应构架指令 对应文件 -output 输出的文件名路径

使用lipo -create 真机库.a的路径 模拟器库.a的的路径 -output 合成库的名字.a ,这样就制作了一个通用的静态库.a。

上一篇下一篇

猜你喜欢

热点阅读