1. 程式人生 > >ld: library not found for -lXXXXX 編譯問題的解決方法

ld: library not found for -lXXXXX 編譯問題的解決方法

團隊開發的時候每次更新後都有可能碰到各種各樣的問題,昨天同事對專案結構做了些修改,更新後編譯就遇到下面的情況:

    ld: library not found for -lAFNetworking  這個錯誤是說編譯時找不到AFNetworking這個連結庫,但是我在專案程式碼中找到對引用的地方,沒有其他異常。從網上搜索找到兩種解決方法。

    方法一點選 XCode 工程檔案,在 Build Phases 中檢視 “ Link binary With Libraries”  

如果不出所料,你應該能發現有一到數個的條目是用紅色字型來顯示的。說明這些被工程引用的這些檔案,其物理檔案已經不處於之前所記錄的地方了。這種情況下,右鍵點選紅色條目,選擇 “Reveal in Project Navigator”

,此時大抵能在左側欄中定位到缺失檔案所在的路徑,接下來就好辦了,找到缺失的檔案,挪回它應該待的地方。

    方法二在工程的 Target 中選中要執行編譯的某個target然後 “get info”,開啟 Build 設定頁面,在 “ Library Search Path” 中新增缺失連結庫的所在資料夾的路徑。

    本來看到這兩種方法時覺得第一種應該就能解決了,因為報錯的資訊看起來就像是原來的檔案引用不到了而已,但是當我按照第一種方法去做時,發現“ Link binary With Libraries” 下沒有紅色的條目,而且本來就沒有AFNetworking這個條目,所以第一種方法不適用。第二種方法也不對,因為我們的專案很多庫是通過pod管理的,

AFNetworking也是pod管理的庫之一。這時候我就想起可能是pod的原因,在嘗試了pod update無果後,發現了第三種解決類似問題的方法。

    方法三:關閉Xcode,在控制檯開啟到工程目錄,用pod install 命令重新安裝,成功後再開啟Xcode編譯專案。

    最後,第三種方法解決了我遇到的問題。但是為什麼為出現這種錯誤呢?以前遇到需要類庫有版本升級、類庫有刪減,使用pod update命令就可以了,而需要重新pod install的情況很少。我又對比了更新前後兩個版本的Podfile,發現也沒有不同,也就是說問題不是由於Podfile變化引起的。又度娘加谷哥了半天,也沒找到相關解釋。

    總結來說,上面三種方法應該都可以解決部分情況,但是不同情況下問題產生的原因是一樣的。第一、二種方法比較好解釋原因,第三種方法,即pod install,為什麼能解決問題我現在還不太明白。希望遇到知道的同學能幫忙解釋下。

    轉載請註明出處 灰燼裡有顆心的部落格 http://grayheart.iteye.com 。