天天看點

Undefined symbols for architecture arm64(其cpu架構)

"_OBJC_CLASS_$_XXX",referenced from: 之類的問題,很多人看到這些很頭疼,不知道從何下手去修改。以下是我總結的相關修改辦法。如下圖

Undefined symbols for architecture arm64(其cpu架構)

  

    這是一個很明顯的在arm64架構下,找不到定義的錯誤。  這類錯誤我總結的就六種,.m 缺失、靜态庫沒導入(不支援arm64 架構,現在基本都支援了,如果不支援更新相關靜态庫。怎麼檢視參考文末)、library路徑問題、header 檔案路徑、Valid Architectures 指定錯誤,連接配接器參數問題

 1.那麼首先檢查 Architectures 選項

  通常情況下,Build Active Architectures Only  在Debug 模式為YES,Release模式為NO。

        Valid Architectures  為 arm64 armv7 armv7s

  需要你了解的是  隻有連接配接了Active 的調試裝置,這個選項才生效,隻編譯目前裝置對應的指令集。如果你沒有連接配接裝置,那麼這裡即使是YES,也不會生效。編譯器會按照你的Valid Architectures和Architectures指定的二進制包進行編譯。

具體參考

   armv6 裝置: iPhone, iPhone2, iPhone3G, 第一代、第二代 iPod Touch

   armv7 裝置: iPhone3GS, iPhone4, iPhone4S

                        iPad, iPad2, iPad3(The New iPad), iPad mini

                        iPod Touch 3G, iPod Touch4

  armv7s裝置: iPhone5, iPhone5C, iPad4(iPad with Retina Display)

  arm64 裝置: iPhone5S, iPad Air, iPad mini2(iPad mini with Retina Display)  之後出的到X都是arm64的裝置了

    2. 向 Link Binary With Libraries 中 添加相應的framework   ,向Compile Source 添加你缺失的.m

    3.修改 Other Linker Flags   添加 -ObjC 和 $(inherited),(也可以直接添加缺失的framework 如:  -framework "frameworkname" )

  4. Header Search Path 和Library  Search Path 先添加$(inherited),如果編譯後,沒有出現,就手拖缺失檔案的相關路徑(如果路徑為多層級,選擇遞歸搜尋recursive 預設是non-recursive)

    5.最後檢查 framework 和.m 有沒有 勾選 target membership 。

  

  總之,如果先思考是靜态庫問題,還是其他檔案問題,會節約很多時間。以上總結,以留檔備查,也希望可以給别人一些思路。

  執行個體 1:      錯誤資訊中有明顯的提示  does not contain bitcode。  是以 直接設定 bitcode 為NO 就可以了

Undefined symbols for architecture arm64(其cpu架構)

附:

   檢視.a或.framework 的靜态庫檔案都支援哪些架構, 終端 進入工程根目錄 find . -name *.a -exec lipo -info "{}" \  或者.framework

轉載于:https://www.cnblogs.com/DafaRan/p/8118205.html