ARM 处理器
Arm处理器,因为其低功耗和小尺寸而闻名,几乎所有的手机处理器都基于arm,其在嵌入式系统中的应用非常广泛,它的性能在同等功耗产品中也很出色
Armv6、armv7、armv7s、arm64都是arm处理器的指令集,所有指令集原则上都是向下兼容的,如iPhone4S的CPU默认指令集为armv7指令集,但它同时也兼容armv6指令集,只是使用armv6指令集时无法充分发挥其性能,即无法使用armv7指令集中的新特性,同理,iPhone5的处理器标配armv7s指令集,同时也支持armv7指令集,只是无法进行相关的性能优化,从而导致程序的执行效率没那么高。
需要注意的是iOS模拟器没有运行arm指令集,编译运行的是x86指令集,所以,只有在iOS设备上,才会执行设备对应的arm指令集
iPhone的指令集
支持两个不同的指令集:32位ARM指令集(armv6|armv7|armv7s)和64位ARM指令集(arm64),i386|x86_64 是Mac处理器的指令集,i386是针对intel通用微处理器32架构的。x86_64是针对x86架构的64位处理器。当使用iOS模拟器的时候会遇到i386|x86_64,iOS模拟器没有arm指令集。模拟器: 4s~5 : i386 5s~6plus : x86_64
X86-64简称x64. 都是64位的.
X86-32简称x86,是一个系列(如80186,80286,80386) .都是32位的.
i386: 即intel80386.是intel公司的一款x86系列CPU.发布于1985年10月17日.将PC从16位时代带入了32位时代.
i386是针对intel通用微处理器32位处理器
x86_64是针对x86架构的64位处理器
模拟器32位处理器测试需要i386架构,
模拟器64位处理器测试需要x86_64架构,
真机32位处理器需要armv6、armv7或者armv7s架构,
真机64位处理器需要arm64架构
不同型号的iPhone都使用的是什么指令集:
连接的手机指令集匹配是由高到低(arm64 > armv7s > armv7>armv6)依次匹配的
ARMv8==ARM64
- iPhone : ARMv6
- iPhone 3G : ARMv6
- iPhone 3GS : ARMv7
- iPhone 4 : ARMv7
- iPhone 4S : ARMv7
- iPhone 5 : ARMv7s
- iPhone 5c : ARMv7s
- iPhone 5s : ARMv8
- iPhone 6 : ARMv8
- iPhone 6 Plus : ARMv8
- iPhone 6s : ARMv8
- iPhone 6s Plus: ARMv8
- iPhone SE : ARMv8
- iPhone 7 : ARMv8
- iPhone 7 Plus : ARMv8
- iPhone 8 : ARMv8
- iPhone 8 Plus : ARMv8
- iPhone X : ARMv8
查看静态库/动态库的CPU指令集
进入库文件所在的路径
查看framework
lipo -info xxx.framework/xxxxFramework
查看.a文件
lipo -info libavcodec.a
他会告诉你它所支持的指令集
关于指令集常见的错误
Undefined symbols for architecture armv7
这是我用脚本编译FFmpeg
库后倒入到工程里,然后在真机的iphone 5
上运行报的错
这是因为脚本文件里写支持cpu架构的只加了
archs="arm64 armv7 x86_64 i386"
而iphone5手机的cpu架构是 armv7s,所以报错的,当我换上iphone7的时候就编译通过了