armv6, armv7, armv7s, arm64 的区别
ARM是微處理器行業(yè)的一家知名企業(yè),arm處理器以體積小和高性能的優(yōu)勢在嵌入式設(shè)備中廣泛使用,幾乎所有手機(jī)都是使用它的。
armv6, armv7, armv7s, arm64 是ARM CPU的不同指令集,原則上是向下兼容的。如iPhone4S CPU支持armv7, 但它同時(shí)兼容armv6,只是使用armv6指令可能無法充分發(fā)揮它的特性。同理iPhone5 CPU支持armv7s,它雖然也兼容armv7,但是卻無法進(jìn)行相關(guān)的優(yōu)化。
?
armv6設(shè)備:iPhone, iPhone2, iPhone 3G,第一代、第二代iPod Touch
armv7設(shè)備:iPhone 3GS, iPhone 4, iPhone 4S
? ? ? ? ? ? ? ? ? ? iPad , iPad 2, ?the new iPad
? ? ? ? ? ? ? ? ? ? iPod Touch 3G, iPod Touch 4
armv7s設(shè)備:iPhone 5 iphone 5c
arm64設(shè)備:iPhone 5s iphone 6 iphone 6s
?
只有在目標(biāo)設(shè)備上,才會執(zhí)行設(shè)備對應(yīng)的指令集。
如果在工程Build Setting的Architectures 中的“Build Active Architecture Only”選擇為YES,則即使你設(shè)置成armv7 , armv7s同時(shí)支持,也只會編譯對應(yīng)指令集的包;若選擇NO,則編譯器會整合兩個(gè)指令集到一起,此時(shí)的包比較大,但是能在iPhone5上使用armv7s的優(yōu)化,同時(shí)也能適配老的設(shè)備。一般都是Debug時(shí)“Build Active Architecture Only”選擇YES,用當(dāng)前的架構(gòu)看代碼邏輯是否有問題;而在Release時(shí)選擇NO,來適配不同的設(shè)備。
此外,模擬器并不運(yùn)行arm代碼,軟件會被編譯成x86可以運(yùn)行的指令。所以生成靜態(tài)庫時(shí)都是會先生成兩個(gè).a,一個(gè)是i386的用于在模擬器運(yùn)行,另一個(gè)是在真實(shí)設(shè)備上運(yùn)行的,然后再用命令將兩個(gè).a合并成一個(gè)。
?
因此如果一些程序中使用的靜態(tài)庫不支持armv7s,而你的工程支持armv7s時(shí),就會出現(xiàn)“xxxx does not contain a(n) armv7s slice:xxxxx for architecture armv7s"的編譯錯(cuò)誤,想要解決這個(gè)問題,有兩個(gè)方法:
1.如果是開源的,能夠找到源代碼,則可以用源代碼重新打一個(gè)支持armv7s的libaray, 或者在工程中直接使用源代碼,而不是靜態(tài)庫。
2.如果不是開源的,要么就坐等第三方庫的支持,要么就暫時(shí)讓你的工程不支持armv7s。
總結(jié)
以上是生活随笔為你收集整理的armv6, armv7, armv7s, arm64 的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ssm基于Java web的校园滴滴代驾
- 下一篇: 计算机面试 OA 试题及答案,办公自动化