symbols not found for architecture arm64 問題解決

在建立本身的靜態庫時引入afn3.x,真機調試的時候遇到了這個問題ios

解決方法:spa

   在Xcode工程的Other linker flags中添加-ObjC 標誌調試

-------------code

在Objective-C中,因爲方法調用都是在運行期肯定的,所以沒有針對方法的symbol,只有針對類的。ip

這樣在靜態庫中若是使用了category擴展已有的類,編譯器不知道如何將category和已有的類整合在一塊兒,就會致使unrecognized selector問題。添加-ObjC標誌後,編譯器會把一個類相關的全部目標文件都加載,這樣就解決了這個問題。可是因爲這樣作會使可執行文件體積變大,因此沒有設爲默認選項。編譯器

在64位ios應用環境下,因爲連接器的一個bug,在靜態庫中只有category沒有對應的class定義時,-ObjC標誌會失效。這時可使用-all_load強制加載全部目標文件,或者使用-force_load指定加載某一個包。io

在Xcode4.2以後,這個連接器bug已經被修復,所以-all_load 和 -force_load標誌都再也不須要了。在必要時添加-ObjC便可。編譯

-----------class

在引入第三方靜態庫的時候有時候也會出現這種問題:擴展

此時 進入這個.a文件所在的目錄,在終端使用  lipo -info xxx.a  看看這些靜態文件是否支持64位,若是是不支持64位的能夠下載一個最新的支持 64位的三方庫.