这两天遇到静态库不支持armv7s的问题,所以顺道了解和总结一下几个arm架构的一些基本区别。

ARM是微处理器行业的一家知名企业,arm处理器以体积小和高性能的优势在嵌入式设备中广泛使用,几乎所有手机都是使用它的。

armv6, armv7, armv7s是ARM CPU的不同指令集,原则上是向下兼容的。如iPhone4S CPU支持armv7, 但它同时兼容armv6,只是使用armv6指令可能无法充分发挥它的特性。同理iPhone5 CPU支持armv7s,它虽然也兼容armv7,但是却无法进行相关的优化。

armv6设备:iPhone, iPhone2, iPhone 3G,第一代、第二代iPod Touch

armv7设备:iPhone 3GS, iPhone 4, iPhone 4S

iPad , iPad 2,  the new iPad

iPod Touch 3G, iPod Touch 4

armv7s设备:iPhone 5

只有在目标设备上,才会执行设备对应的指令集。

如果在工程Build Setting的Architectures 中的“Build Active Architecture Only”选择为YES,则即使你设置成armv7 , armv7s同时支持,也只会编译对应指令集的包;若选择NO,则编译器会整合两个指令集到一起,此时的包比较大,但是能在iPhone5上使用armv7s的优化,同时也能适配老的设备。一般都是Debug时“Build Active Architecture Only”选择YES,用当前的架构看代码逻辑是否有问题;而在Release时选择NO,来适配不同的设备。

此外,模拟器并不运行arm代码,软件会被编译成x86可以运行的指令。所以生成静态库时都是会先生成两个.a,一个是i386的用于在模拟器运行,另一个是在真实设备上运行的,然后再用命令将两个.a合并成一个。

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

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

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

转载于:https://www.cnblogs.com/cywin888/p/3229505.html

armv6, armv7, armv7s的区别相关推荐

  1. armv6, armv7, armv7s和i386

    出现这类问题一般与静态库有关. i386是代表模拟器,显示i386错误说明静态库不支持模拟器,只支持真机. armv6, armv7, armv7s是ARM CPU的不同指令集,原则上是向下兼容的.如 ...

  2. ZBar 支持i386 armv6 armv7 armv7s x86_64 arm64

    ZBar 支持i386 armv6 armv7 armv7s x86_64 arm64 mp3转码静态库libmp3lame.a,成功加入arm64支持后, 顺便把之前记录的二维码静态库libzbar ...

  3. xcode armv6 armv7 armv7s arm64

    眼下ios的指令集有下面几种: armv6 iPhone iPhone2 iPhone3G 第一代和第二代iPod Touch armv7 iPhone4 iPhone4S armv7s iPhone ...

  4. xcode armv7 armv7s arm64

    armv6 armv7 armv7s arm64引起编译包翻倍增大的问题,下边来说一下关于ios这个指令集 目前ios的指令集有以下几种: armv6 iPhone iPhone2 iPhone3G ...

  5. iOS armv7,armv7s, arm64

    目前ios的指令集有以下几种: armv6 iPhone iPhone2 iPhone3G 第一代和第二代iPod Touch armv7 iPhone4 iPhone4S armv7s iPhone ...

  6. No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=arm64, VALID_ARCHS=armv7 armv7s)

    问题: No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=arm64, VALID_ARCHS=armv7 armv ...

  7. 关于iOS 编译器 armv7 armv7s arm64 i386 x86_64

    armv7 armv7s arm64 是ARM处理器的指令集 i386 x86_64 处理的指令集 对应的设备 arm64:iPhoneX | iphone8 plus|iPhone8| iPhone ...

  8. 第26月第22天 iOS瘦身之armv7 armv7s arm64选用 iOS crash

    1.iOS瘦身之armv7 armv7s arm64选用 机器对指令集的支持是向下兼容的,因此armv7的指令集是可以运行在iphone5S以上的,只是效率没那么高而已~ 但是由于苹果要求必须支持ar ...

  9. iOS关于armv7,armv7s,arm64,i386,x86_64等问题

    iOS测试分为模拟器测试和真机测试,处理器分为32位处理器,和64位处理器, 模拟器32位处理器测试需要i386架构,(iphone5,iphone5s以下的模拟器) 模拟器64位处理器测试需要x86 ...

  10. iOS关于armv7,armv7s,arm64,i386,x86_64

    iOS测试分为模拟器测试和真机测试,处理器分为32位处理器,和64位处理器, 模拟器32位处理器测试需要i386架构,(iphone5,iphone5s以下的模拟器) 模拟器64位处理器测试需要x86 ...

最新文章

  1. hdu 1811 Rank of Tetris (并查集+拓扑排序)
  2. 网络编程学习笔记(TCP回射服务器程序修订版)
  3. 有点小激动-Index Condition Pushdown Optimization
  4. C/C++内存泄露,如何解决内存泄露?
  5. MyEclipse使用总结——设置MyEclipse使用的Tomcat服务器
  6. 红帽oracle关系,redhat和oracle linux kernel对应关系
  7. 无法打开“XXXX”,因为Apple无法检查其是否包含恶意软件。怎么解决?
  8. UNION JOIN 连接表
  9. 小米路由器怎么连接无盘服务器,播放器+服务器的方法瞬间玩转小米路由方法图文介绍...
  10. php inner.html,javascript – PHP:如何获得CURRENT innerHTML?
  11. php广告屏如何同步,户外LED大屏广告如何投放才能更吸引人?
  12. 3dmax:3dmax的软件中右边工具栏的创建、修改、层次、运动、显示、几何体的粒子系统、工具、灯光、摄影、空间扭曲、系统、实用程序、辅助对象等使用技巧之详细攻略
  13. PS自定义形状+笔刷添加打造完美水印
  14. 台式计算机如何双屏显示,电脑怎么分屏?|台式电脑双显示器连接方法
  15. 架构组件—Android应用中使用视图绑定(binding)
  16. 大屏antdesign走马灯轮播加图形渲染
  17. Google手机操作系统Android将100%开源
  18. 数论 质因数分解 试除法
  19. 超详细的Android so库的逆向调试
  20. 二十岁的女孩应该有的思想

热门文章

  1. 漏洞扫描工具AppScan下载网盘
  2. 一文讲清楚【KL距离】、【torch.nn.functional.kl_div()】和【torch.nn.KLDivLoss()】的关系
  3. python爬虫英文单词_Python_爬虫百度英文学习词典
  4. Android实现 广告识别之 广告库
  5. INVENTOR结构件生成器,新建型材
  6. R语言学习笔记 | R语言的入门
  7. 企业销售统计管理页面ui模板
  8. 阿里云服务器加快下载github
  9. 基于STM32的录音与播音
  10. pr如何处理音效_在pr中怎么让声音变的好听?pr怎么让说话的声音更好听?