坑爹的 ld: symbol(s) not found for architecture armv7


前兩天好好的程序在Xcode 8 4s(8.4)真機的時候遇到上圖錯誤,但是在5s、6s上都能正常運行,第一反應百度--然后根據百度經驗:

如果真機調試就是 undefined symbols for architecture armv7錯誤!
發生這種錯誤通常是project.pbxproj這個文件引起的,尤其在多人合作開發的時候,svn提交不規范可能導致project.pbxproj發生錯誤,導致文件的引用不在project.pbxproj文件中。
xcode項目import文件會根據project.pbxproj來查找,查找不到文件的引用則會有上述的錯誤。
 
解決方法點擊工程,在主界面中點擊Build Phases,根據提示信息“XXX”來判斷缺少什么文件,一般如果缺少自定義的文件,Complie Sources下沒有XXX文件,那么就在Complie Sources中加入該文件。如果缺少類庫,則在Link Binary With Libraries中加入該類庫。
 
又或者是:

一般真機調試時,如果報armv7錯誤,一般都是因為armv7指令集是打開的,而之前一些引用庫都是使用armv7之前的指令集編譯的(當這些引用的外部庫使用armv7指令集編譯后,就不會出現該問題)

解決辦法:

   1. 去掉armv7指令集支持: xcode –> Build Settings –>valid Architectures  去掉armv7

   2. 兼容armv7 : project –> Build Settings,把Build Active Architectures Only 的值設置為YES

呃,讓我折騰的不亦樂乎,扣持了大半天還是一樣的報錯。最后無望的自己開始靜下心來仔細看錯誤信息,發現都是與AF、MJ相關的第三方庫類報錯,那肯定是跟它倆跑不掉關系了。
通過報錯路徑搜索發現竟然有兩個libAFNetworking.a與兩個MJRefresh.a,好吧 .a靜態庫重復了。估計是之前cocoapods使用問題有關,刪掉之后完美運行。所以在編程中遇到錯誤第一時間還是仔細閱讀錯誤信息,其實已經基本上能鎖定錯誤范圍了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM