学习笔记-移动设备的处理器指令集 armv6 armv7 armv7s arm64

首先了解一下  苹果手机不同的机型所支持的arm处理器的指令集

Arm 处理器因为低功耗和小尺寸而闻名,几乎所有的手机设备上都是基于arm的,其在嵌入式系统中的应用非常广泛,它的性能在同等功耗产品中也很出色。

1.armv6  支持 iPhone  iPhone2 iPhone3g和第一代 第二代的iPod touch

armv7  支持iPhone4 和 iPhone4s

armv7s 支持 iPhone5 和iPhone5c

arm64 支持iPhone5s。需要最低支持5.1.1

2.机器对于指令集是向下兼容的,也就是说armv7指令集  是可以运行在iPhone5上的,只是效率没那么高而已

3.xcode里面关于arm的选项

@1    Architecture : 指你想支持的指令集。

@2    Valid architectures : 指即将编译的指令集。 (Architecture 和 Valid architectures 的交集,才是xcode编译生成的二进制包所支持的指令集。比如,将Architectures支持arm指令集设置为:armv7,armv7s,对应的Valid Architectures的支持的指令集设置                  为:armv7s,arm64,那么此时,XCode生成二进制包所支持的指令集只有armv7s 。)

@3    Build Active Architecture Only : 只是否只编译当前连接设备的指令集。

这个选项起作用需要两个条件:1.值设置为yes   2.成功连接上设备

假定我们将Build Active Architecture Only值设置为YES,同时XCode连接上手机iPhone5S(匹配指令集arm64)

 第一种情况

Architectures:  armv7, armv7s, arm64

ValidArchitectures:  armv6, armv7s, arm64

生成二进制包支持的指令集: arm64

 第二种情况

Architectures: armv6, armv7, armv7s

Valid Architectures:  armv6, armv7s, arm64

生成二进制包支持的指令集: armv7s

 第三种情况

Architectures:  armv6, armv7

Valid Architectures: armv6, armv7s, arm64

生成二进制包支持的指令集: armv7

 第四种情况

Architectures: armv6

Valid Architectures: armv6, armv7s, arm64

生成二进制包支持的指令集: 虽然编译成功了,但是并没有任何目标生成, 因为从XCode4.5开始,就不再支持armv6指令集,所以列表中写了也是白写。

  第五种情况

Architectures: armv7, armv7s, arm64

Valid Architectures: armv7,armv7s

生成二进制包支持的指令集: 编译出错信息

  1. 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指令集,若valid Architectures列表不包含此指令集,则编译将会出错:

  1. 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。

4.如果想APP在各个机器上高效率的运行,必须将Build Active Architecture Only 改为no,Valid Architectures 选择对应的指令集 为 armv7  armv7s  arm64。这个会为各个指令集 编译对应的代码,但是最后ipa包得体积就翻了3倍,release设置为NO.

5.如果想让app体积保持最小,则现阶段应该选择Valid architectures 为  arm64 ,Build Active Architecture Only选择yes或者no就无所谓了。

6.补充一点            iOS模拟器上不运行arm指令,软件会被编译成x86可以运行的指令,所以只有苹果设备上才会编译运行arm指令集。所以生成静态库时都是会先生成两个.a,一个是i386的用于在模拟器运行,另一个是在真实设备上运行的,然后再用命令行将两个.a合并成一个。

因此如果一些程序中使用的静态库不支持armv7s,而你的工程支持armv7s时,就会出现“xxxx does not contain a(n) armv7s slice:xxxxx for architecture armv7s"的编译错误,想要解决这个问题,有两个方法:

1.如果是开源的,能够找到源代码,则可以用源代码重新打一个支持armv7s的libaray, 或者在工程中直接使用源代码,而不是静态库。

2.如果不是开源的,要么就坐等第三方库的支持,要么就暂时让你的工程不支持armv7s。

时间: 2024-08-28 12:53:49

学习笔记-移动设备的处理器指令集 armv6 armv7 armv7s arm64的相关文章

xcode armv6 armv7 armv7s arm64指令集

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 如果文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额随意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源码下载:点我传送 之前每个版本的ipa包打出来都才20M出头,后来不知道从哪个版本起打的包每次都将近40M,但是工程中也没有明显的增加很大第三方类或者图片.静态文件.于是就开始了各种瘦身计划:压缩图片,删除不必要静态库.做了一番改动后发现包只比原来小了1M多,收效甚微. 其实是armv6 armv7 armv7s arm64引起

Xcode 中armv6 armv7 armv7s arm64 i386 x86_64 归纳 (Architectures, Valid Architectures, Build Active Architecture Only)

http://www.jianshu.com/p/09b445300d40 简介: armv7|armv7s|arm64都是ARM处理器的指令集 i386|x86_64 是Mac处理器的指令集 目前iOS的ARM处理器指令集及其支持的设备: armv6 (基本消失了) iPhone iPhone2 iPhone3G iPod Touch1, 2 armv7 (4s最高支持到iOS9, 从iOS10开始支持的也可以不考虑这个了) iPhone 3GS iPhone4 iPhone4S iPad,

xcode armv6 armv7 armv7s arm64

目前ios的指令集有以下几种: armv6 iPhone iPhone2 iPhone3G 第一代和第二代iPod Touch armv7 iPhone4 iPhone4S armv7s iPhone5 iPhone5C arm64 iPhone5S 机器对指令集的支持是向下兼容的,因此armv7的指令集是可以运行在iphone5S的,只是效率没那么高而已~ ================================================ Architecture : 指你想支持

Apple移动设备处理器指令集 armv6、armv7、armv7s及arm64

Arm处理器,因为其低功耗和小尺寸而闻名,几乎所有的手机处理器都基于arm,其在嵌入式系统中的应用非常广泛,它的性能在同等功耗产品中也很出色. Armv6.armv7.armv7s.arm64都是arm处理器的指令集,所有指令集原则上都是向下兼容的,如iPhone4S的CPU默认指令集为armv7指令集,但它同时也兼容armv6指令集,只是使用armv6指令集时无法充分发挥其性能,即无法使用armv7指令集中的新特性,同理,iPhone5的处理器标配armv7s指令集,同时也支持armv7指令集

树莓派学习笔记——I2C设备载入和速率设置

原文:http://blog.csdn.net/xukai871105/article/details/18234075 1.载入设备 方法1——临时载入设备 sudo modprobe -r i2c_bcm2708  #卸载设备 -r代表remove sudo modprobe i2c_bcm2708     #重新载入设备 方法2——永久载入设备 打开配置文件,进行修改 sudo nano /etc/modules                # 使用nano打开文件 增加以下两行 i2c

YMP框架学习笔记(三)------处理器、控制器、拦截器

一.处理器 1.事件处理器 添加类WebEventHandler.java并继承IWebEventHandler public class WebEventHandler implements IWebEventHandler { public void onInitialized() { } public void onRequestReceived(IRequestContext context) { } public void onRequestCompleted(IRequestCont

Windows phone 8 学习笔记(7) 设备(转)

本节主要涉及到 Windows phone 8 手机支持的各类设备,包括相机.设备状态,振动装置等.还有各类感应器,包括磁力计.加速度器和陀螺仪.通过设备状态可以获取内存.硬件.电源.键盘等状态:通过相机捕获照片和视频:各类感应器帮助我们获取设备的运动状态等. 快速导航:一.设备状态二.相机三.罗盘传感器四.加速度计五.陀螺仪六.如何振动手机 一.设备状态 通过DeviceStatus 类我们可以确定设备的相关状态信息,比如内存大小啊,固件版本啊,还有是否部署了物理键盘等信息,以及与电源的相关信

【转】 树莓派学习笔记——I2C设备载入和速率设置

原文网址:http://blog.csdn.net/xukai871105/article/details/18234075 1.载入设备 方法1——临时载入设备 [plain] view plaincopy sudo modprobe -r i2c_bcm2708  #卸载设备 -r代表remove sudo modprobe i2c_bcm2708     #重新载入设备 方法2——永久载入设备 打开配置文件,进行修改 [plain] view plaincopy sudo nano /et

系统虚拟化学习笔记——PCI设备

内容摘自<系统虚拟化:原理与实现> PCI 总线架构 PCI总线是典型的树结构.把北桥中host-PCI桥看做根,总线中其他PCI-PCI桥,PCI-ISA桥(ISA总线转PCI总线桥)等桥设备和 直接连PCI总线的设备看做节点,整个PCI架构可以概括成下图: 通过桥,PCI可以很容易被扩展,并且与其他总线相互挂接,构成整个系统的总线网络.与HOST-PCI桥相连的总线称为总线0, 其他层次总线的编号,是在BIOS(或者操作系统)枚举设备时确定的. 设备标识符 设备标识符可以看做设备在PCI总