出現這類問題一般與靜態庫有關。
i386是代表模擬器,顯示i386錯誤說明靜態庫不支援模擬器,只支援真機。
armv6, armv7, armv7s是arm cpu的不同指令集,原則上是向下相容的。如iphone4s cpu支援armv7, 但它同時相容armv6,只是使用armv6指令可能無法充分發揮它的特性。同理iphone5 cpu支援armv7s,它雖然也相容armv7,但是卻無法進行相關的優化。
只有在目標裝置上,才會執行裝置對應的指令集。
如果在工程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時,就會出現「***x does not contain a(n) armv7s slice:***xx for architecture armv7s"的編譯錯誤,想要解決這個問題,有兩個方法:
1.如果是開源的,能夠找到源**,則可以用源**重新打乙個支援armv7s的libaray, 或者在工程中直接使用源**,而不是靜態庫。
2.如果不是開源的,要麼就坐等第三方庫的支援,要麼就暫時讓你的工程不支援armv7s。
arm結構處理器,幾乎所有的手機都基於arm,其在嵌入式系統中應用非常廣泛。
arm 處理器因為低功耗和小尺寸而聞名,它的效能在同等功耗的產品中也很出色。這裡我們注意一點,模擬器並不執行arm**,軟體會被編譯成x86可以執行的指令。只有在目標裝置上,才會執行裝置對應的指令集。
armv6裝置包括
iphone, iphone2, iphone3g以及第一代和第二代ipod touch
armv7裝置包括
iphone3gs, iphone4
ipad, ipad2, the new ipad
ipod touch 3g, ipod touch 4
armv7s裝置包括
iphone5
ARMv7與ARMv8的區別
參考連線 區別 1.指令集 armv8使用64位及32位的指令集,armv7使用32位及16位的指令集。2.通用暫存器 v8包含32個暫存器其中前32個位64位暫存器,後32個位32位暫存器,v7只包含16個32位暫存器。3.simd暫存器 v8包含32個128位暫存器,v7是32個64位暫存器。目...
ARMv7的記憶體管理
armv7有三個系列 armv7 a,armv7 r,armv7 m armv7 r real time profile,支援arm和thumb指令集,支援mpu memory protection unit 無mmu armv7 m micro controller profile,只支援thum...
xcode6預設不支援armv7s
公升級到xcode6以後發現,配置裡關於architectures到預設選項只有armv7和arm64。而再次之前xcode5到時代還是有armv7 armv7s和arm64三項的。而支援armv7s的ios裝置有iphone5 iphone5c和ipad4.同時可以向下相容armv7,效率上應該有...