開發中遇到arm64之類的報錯多種解決方案
公司做SDK開發難免遇到使用者使用SDK遇到各種各樣的原因,固然使用文件說明排除的大部分,但難免會有使用者自己的工程報其他錯而懷疑是SDK的問題,不得不一一去協助解決,下面關於arm64指令集不支援的錯誤總計:
部分報錯內容
Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_WBAuthorizeResponse", referenced from:objc-class-ref in Payment(MCHApi.o)
"_OBJC_CLASS_$_WBAuthorizeRequest", referenced from:
objc-class-ref in Payment(MCHLoginView.o)
"_OBJC_CLASS_$_WeiboSDK", referenced from:
objc-class-ref in Payment(MCHApi.o)
objc-class-ref in Payment(MCHLoginView.o)
"_OBJC_CLASS_$_BaiduOAuthSDK", referenced from:
objc-class-ref in Payment(MCHApi.o)
objc-class-ref in Payment(MCHLoginView.o)
先說一下關於指令集的詳細內容,不用指令集代表不同的裝置
對於iOS裝置來說iOS的指令集有armv6、armv7、armv7s、arm64
這樣四種,不同型號的iOS裝置使用不同的指令集,下面是各自的區別:
armv6
- iPhone、iPhone 3G
- iPod 1G、iPod 2G
armv7
- iPhone 3GS、iPhone 4
- iPod 3G、iPod 4G、iPod 5G
- iPad、iPad 2、iPad 3、iPad Mini
armv7s
- iPhone 5、iPhone 5C
- iPad 4
arm64
- iPhone 5S iPhone 6 iPhone 6Plus
- iPad Air, Retina iPad Mini
關於報錯總結一下幾點原因:
1.build setting裡面的 Architectures設定問題
Architectures 設定所支援的指令集
Build Active Architectures Only YES的時候是針對所測試的裝置去生成所對應的二進位制包(例如此刻是iPhone6 ,那麼就只會生成一套arm64指令集的二進位制),NO的時候回生成所有支援指令集的二進位制包,當然這樣會消耗資源。
比如,你的Valid Architectures設定的支援arm指令集版本有:armv7/armv7s/arm64,對應的Architectures設定的支援arm指令集版本有:armv7s,這時Xcode只會生成一個armv7s指令集的二進位制包。
2.是所用的靜態庫有的可能不支援arm64等指令集,那麼就需要我們去重新獲取一份支援arm64的靜態庫檔案
3.就是用到SVN版本控制器的時候,預設忽略幾種型別的檔案的,例如.a .o
1.在finder需要去查詢cornerstone的檔案 ,com+shift+G ,或者點開finder-前往-前往資料夾, 把該路徑 ~/.subversion/config 貼上到上面,點選 前往
2、開啟config檔案,在裡面搜尋 global-ignores ,你會看到下面這行,
#global-ignores = .o .lo .la .al .libs .so .so.[0-9]* .a .pyc .pyo # .rej ~ ## .#* .*.swp .DS_Store
將其修改為
global-ignores = .o .lo .la .al .libs .so .so.[0-9]* .pyc .pyo# .rej ~ ## .# .*.swp .DS_Store
儲存後,再開啟svn進行上傳就不會丟失.a檔案了
PS:上傳圖片不知道怎麼回事出現的都是❓不顯示,很煩躁,還有一些原因暫時沒遇到過,先不寫了