靜態庫引入引起的錯誤解決方案,ld: warning: ignoring file ”…/XXX.a”, file was built for archive which is not the architecture being linked (armv7): “…/XXX.a” Undefined symbols for architecture armv7: "_OBJC_CLASS_$


想目中不免會引入一些靜態庫,可是有時加入'.a'文件后編譯便會報以下錯誤

ld: warning: ignoring file ”…/XXX.a”, file was built for archive which is not the architecture being linked (armv7): “…/XXX.a”
Undefined symbols for architecture armv7:
  "_OBJC_CLASS_$_XXX", referenced from:
      objc-class-ref in XXX.o

 

百度得到的第一頁的大部分答案是找不到路徑或'.a'文件缺失

參考:http://www.cocoachina.com/bbs/read.php?tid-247940.html 

http://blog.csdn.net/kaizi318/article/details/10362673

http://www.cnblogs.com/zxykit/p/5165857.html

http://blog.csdn.net/bindu27227/article/details/23706369

但是這並不能解決這次遇到的問題

這次的文件導入后出現一個奇怪的現象,模擬器和iOS 9.3.1的真機調試都會報上面出現的錯誤,但是iOS 10.2.1卻可以正常運行。

 

問題大體可以定位到以下幾處:

1.工程沒有找到導入的'.a'的路徑。

  解決:查看Library Search Paths看看是否包含了相應的靜態庫的路徑(參考http://blog.csdn.net/u012703795/article/details/24464837)。

2.導入的'.a'文件有問題

  解決:查看'.a'文件支持的arm指令集(參考:http://stackoverflow.com/questions/34844932/error-ld-warning-ignoring-file-libfile01-a-file-was-built-for-archive-which

和 http://blog.csdn.net/lvxiangan/article/details/42486731)

 

經過上面的操作后發現這次導入的'.a'文件僅支持arm64,這樣的'.a'文件也是醉醉的

於是將Valid Architectures 改為僅有arm64,再次編譯運行。。。

這次該好了吧,然而並沒有

lb ‘/…/XXX.a’ does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

 

解決:參考http://blog.csdn.net/zhyl8157121/article/details/48528831

 

再次運行,OK

 


免責聲明!

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



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