iOS中的armv6、armv7、armv7s含义详解
Arm处理器,因为其低功耗和小尺寸而闻名,几乎所有的手机处理器都基于arm,其在嵌入式系统中的应用非常广泛,它的性能在同等功耗产品中也很出色。
Armv6、armv7、armv7s、arm64都是arm处理器的指令集,所有指令集原则上都是向下兼容的,如iPhone4S的CPU默认指令集为armv7指令集,但它同时也兼容armv6指令集,只是使用armv6指令集时无法充分发挥其性能,即无法使用armv7指令集中的新特性,同理,iPhone5的处理器标配armv7s指令集,同时也支持armv7指令集,只是无法进行相关的性能优化,从而导致程序的执行效率没那么高。
需要注意的是iOS模拟器没有运行arm指令集,编译运行的是x86指令集,所以,只有在iOS设备上,才会执行设备对应的arm指令集。
目前为止Apple移动设备默认指令集(2014.8.22)
-------------------------------------------------------------------------------------
armv6 设备: iPhone, iPhone2, iPhone3G, 第一代、第二代 iPod Touch
armv7设备: iPhone3GS, iPhone4, iPhone4S
iPad, iPad2, iPad3(The New iPad), iPad mini
iPod Touch 3G, iPod Touch4
armv7s设备: iPhone5, iPhone5C,iPad4(iPad with Retina Display)
arm64 设备: iPhone5S+, iPad Air, iPad mini2(iPad miniwith Retina Display)
-------------------------------------------------------------------------------------
Architectures:
指明选定Target要求被编译生成的二进制包所支持的指令集支持指令集是通过编译生成对应的二进制数据包实现的,如果支持的指令集数目有多个,就会编译出包含多个指令集代码的数据包,从而会造成最终编译生成的包很大。
Valid Architectures:
指明可能支持的指令集并非Architectures列表中指明的指令集都会被支持,ValidArchitectures限制可能被支持的指令集的范围,即ValidArchitectures和Architectures列表的交集,才是XCode最终生成二进制包所支持的指令集。
比如,将Architectures支持arm指令集设置为:armv7,armv7s,对应的Valid Architectures的支持的指令集设置为:armv7s,arm64,那么此时,XCode生成二进制包所支持的指令集只有armv7s。
Build Active Architecture Only:
指明是否只编译当前连接设备所支持的指令集
该选项起作用的条件有两个,必须同时满足才会起作用:
1. 其值设置为YES
2. XCode成功连接调试设备
假定我们将Build Active ArchitectureOnly值设置为YES,同时XCode连接上手机iPhone5S(匹配指令集arm64)
1. 第一种情况
Architectures: armv7, armv7s, arm64
ValidArchitectures: armv6, armv7s, arm64
生成二进制包支持的指令集: arm64
2. 第二种情况
Architectures: armv6, armv7, armv7s
Valid Architectures: armv6,armv7s, arm64
生成二进制包支持的指令集: armv7s
3. 第三种情况
Architectures: armv6, armv7
Valid Architectures: armv6, armv7s, arm64
生成二进制包支持的指令集: armv7
4. 第四种情况
Architectures: armv6
Valid Architectures: armv6, armv7s, arm64
生成二进制包支持的指令集:虽然编译成功了,但是并没有任何目标生成, 因为从XCode4.5开始,就不再支持armv6指令集,所以列表中写了也是白写。
5. 第五种情况
Architectures: armv7, armv7s, arm64
Valid Architectures: armv7,armv7s
生成二进制包支持的指令集: 编译出错信息
- No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=arm64, VALID_ARCHS=armv7 armv7s)
可以看出:当Build Active Architecture Only起作用时:
连接的手机指令集匹配是由高到低(arm64 > armv7s > armv7)依次匹配的。
如连接手机为iPhone5S,其默认指令集为arm64,若Architectures列表为armv7,armv7s,则会选取armv7s指令集为目标指令集,如果此时Valid Architectures列表中包含该指令集,则成功生成的二进制包只支持armv7s指令集,若alid Architectures列表不包含此指令集,则编译将会出错:
- No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=armv7s, VALID_ARCHS=armv7 arm64)
同样的,若Architectures列表为armv7,则会选取armv7作为目标指令集,若Valid Architectures列表中包含了armv7指令集,则能够成功生成二进制包,其支持的指令集只有armv7,若Valid Architectures列表中不包含armv7,则编译失败。
建议:通常Debug模式设置值为Yes,Release模式设置为No
如果引用到第三方的库,以前在iphone4s下编译没有问题,但是换成iphone5之后,提示:
Undefined symbols for architecture armv7s:
"_OBJC_CLASS_$_AMapView", referenced from:
objc-class-ref in libMAMapKit.a(MAMapView.o)
ld: symbol(s) not found for architecture armv7s
大体意思是:引用自XX.a静态库的XX类不支持armv7s指令
具体设置参考:http://blog.csdn.net/sky_2016/article/details/39737279
iOS中的armv6、armv7、armv7s含义详解相关推荐
- Python中的__name__和__main__含义详解
背景 在写Python代码和看Python代码时,我们常常可以看到这样的代码: ? 1 2 3 4 5 def main(): ...... if __name__ == "__ma ...
- iOS中 HTTP/Socket/TCP/IP通信协议详解 韩俊强的博客
版权声明:本文为博主原创文章,未经博主允许不得转载. 每日更新关注:http://weibo.com/hanjunqiang 新浪微博 简单介绍: [objc] view plaincopy // ...
- iOS——armv7,armv7s,arm64详解
这2天升级到xcode6,用ios8 SDK编译老项目,各种Undefined symbols for architecture xxx,精神差点崩溃了.不过最后还是解决了,本文简单总结一下 简单来说 ...
- iOS中UIColor,CGColor,CIColor详解
最近看了看CoreGraphics的东西,看到关于CGColor的东西,于是就想着顺便看看UIColor,CIColor,弄清楚它们之间的区别和联系.下面我们分别看看它们三个的概念: 一.UIColo ...
- iOS中 本地通知/本地通知详解 韩俊强的博客
布局如下:(重点讲本地通知) iOS开发者交流QQ群: 446310206 每日更新关注:http://weibo.com/hanjunqiang 新浪微博 Notification是智能手机应用编 ...
- IOS中Key-Value Coding (KVC)的使用详解
kvc,键值编码,是一个非正式的协议,它提供一种机制来间接访问对象的属性.直接访问对象是通过调用访问器的方法实现,而kvc不需要调用访问器的设置和获取方法,可以直接访问对象的属性. 下面介绍一下kvc ...
- armv6, armv7, armv7s和i386
出现这类问题一般与静态库有关. i386是代表模拟器,显示i386错误说明静态库不支持模拟器,只支持真机. armv6, armv7, armv7s是ARM CPU的不同指令集,原则上是向下兼容的.如 ...
- ZBar 支持i386 armv6 armv7 armv7s x86_64 arm64
ZBar 支持i386 armv6 armv7 armv7s x86_64 arm64 mp3转码静态库libmp3lame.a,成功加入arm64支持后, 顺便把之前记录的二维码静态库libzbar ...
- java 串口 dtr rts_串口(RS232 RS485等)通讯中RTS/CTS,DTR/DSR的含义详解
串口(RS232 RS485等)通讯中RTS/CTS,DTR/DSR的含义详解 先贴出缩写的含义: DTR – Data Terminal Ready DSR – Data Set Ready RTS ...
- 【整理】串口(RS232/RS485等)通讯中RTS/CTS,DTR/DSR的含义详解
[整理]串口(RS232/RS485等)通讯中RTS/CTS,DTR/DSR的含义详解 RS232 crifan 7年前 (2013-10-17) 14942浏览 0评论 [背景] 之前就折腾过很多关 ...
最新文章
- Android之封装倒计时页面
- 容器中Java RAM的使用:不会丢失内存的5大技巧
- leetcode 148. 排序链表(归并排序)
- python的指针跟c的区别_ctypes中的LP_x*指针和*p指针有什么区别?(以及与结构的奇怪交互)...
- cad一键标注闭合区域lisp_CAD快捷键大全,你值得学会!
- php编写计算程序,PHP编写的小应用——计算器
- floquet端口必须沿z轴设置_请问CST 2012 floquet中的模式设置
- pyqt5快速开发与实战_用云开发快速制作客户业务需求收集小程序丨实战
- 使用剪切板[3]: SetComponent、GetComponent
- 易语言 — 数据类型
- MaxCompute/DataWorks权限问题排查建议
- max3232ese_MAX3232CSE使用指南,MAX3232CES和MAX3232ESE有什么区别?
- Hyperscan Windows 编译指南
- class CText{}; CText t; int const CText::*p; 什么意思?
- linux 分区怎样缩小,如何缩小磁盘分区大小
- 无线工业物联网数据监测终端
- 用Meta标签代码让360双核浏览器默认极速模式
- overleaf表格_搞定LaTeX论文中的表格
- 讲讲React中的State和Props
- GMap.net在winform中调用高德地图