開發中遇到arm64之類的報錯多種解決方案

2021-08-17 02:58:58 字數 1776 閱讀 7224

公司做sdk開發難免遇到使用者使用sdk遇到各種各樣的原因,固然使用文件說明排除的大部分,但難免會有使用者自己的工程報其他錯而懷疑是sdk的問題,不得不一一去協助解決,下面關於arm64指令集不支援的錯誤總計:

部分報錯內容

先說一下關於指令集的詳細內容,不用指令集代表不同的裝置

對於ios裝置來說ios的指令集有armv6、armv7、armv7s、arm64這樣四種,不同型號的ios裝置使用不同的指令集,下面是各自的區別:

armv7

armv7s

arm64

關於報錯總結一下幾點原因:

1.build setting裡面的 architectures設定問題

architectures 設定所支援的指令集

build active architectures only  yes的時候是針對所測試的裝置去生成所對應的二進位製包(例如此刻是iphone6 ,那麼就只會生成一套arm64指令集的二進位制),no的時候回生成所有支援指令集的二進位製包,當然這樣會消耗資源。

valid architectures 該編譯項指定可能支援的指令集,該列表和architectures列表的交集,將是xcode最終生成二進位製包所支援的指令集。

比如,你的valid architectures設定的支援arm指令集版本有:armv7/armv7s/arm64,對應的architectures設定的支援arm指令集版本有:armv7s,這時xcode只會生成乙個armv7s指令集的二進位製包。

比如,你的valid architectures設定的支援arm指令集版本有:armv7/armv7s/arm64,對應的architectures設定的支援arm指令集版本有:armv7s,這時xcode只會生成乙個armv7s指令集的二進位製包。

2.是所用的靜態庫有的可能不支援arm64等指令集,那麼就需要我們去重新獲取乙份支援arm64的靜態庫檔案

3.就是用到svn版本控制器的時候,預設忽略幾種型別的檔案的,例如.a  .o

ARM64中的對齊檢測

pc對齊檢測,arch64下為4 bytes sp對齊檢測,預設16 bytes,受sctlr el 的sa控制 有問題的 addr區域為device mem32 addr valitile unsigned long addr 由於使用了long,彙編後用了 x暫存器 64 bit 當addr非b...

arm64的ioremap ARM IO埠 記憶體

linux在arm中並沒有io埠概念,暫存器和記憶體位於記憶體空間的時候稱作io記憶體。這裡簡單說一下操作步驟 1 申請 2 對映 3 訪問 4 釋放 具體操作操作步驟如下 1 申請 request mem region 申請後在系統相當於對已有資源做了個標記,即本資源已經申請占用,若相同資源再申請...

NDK 開發中,各種指令集的坑,arm64

最近在ndk開發中遇到了乙個奇怪的問題,希望記錄下,可以幫到大家 我編譯了一些 so 動態庫,只編譯了armeabi v7a armeabi 指令集,其它指令集編譯不了,具體原因還沒查出。因為同時也呼叫了第三方的.so 動態庫,而第三方提供7個指令集,分別為 arm64 v8a armeabi ar...