linker command failed with exit code 1 (use -v to see invocation)

linker command failed with exit code 1 (use -v to see invocation)

iOS開發(fā)中遇到上面編譯鏈接錯誤,無疑是最頭疼的,基于自己踩過的坑,記載下來,供人參考。

一、當(dāng)編譯鏈接錯誤上方有提示:ld: "xx" duplicate symbol 錯誤

出現(xiàn)這種錯誤,首先查看是不是自己項目文件重復(fù)導(dǎo)入了,但這種都很容易查找看出,若是沒有,那多半是導(dǎo)入的多個第三方SDK編譯鏈接時產(chǎn)生的沖突問題。這時請根據(jù)自己的項目情況修改鏈接參數(shù)(Other Linker Flag)。

Other Linker Flag鏈接填寫的參數(shù)有這三種。

1.-ObjC

這個flag告訴鏈接器把庫中定義的Objective-C類和Category都加載進來。這樣編譯之后的app會變大(因為加載了其他的objc代碼進來)。但是如果靜態(tài)庫中有類和category的話只有加入這個flag才行。

2.-all_load

這個flag是專門處理-ObjC的一個bug的。用了-ObjC以后,如果類庫中只有category沒有類的時候這些category還是加載不進來。變通方法就是加入-all_load或者-force-load。-all_load會強制鏈接器把目標文件都加載進來,即使沒有objc代碼。

(PS:出現(xiàn)錯誤的原因是不是項目就是用了這個flag呢!建議換成下面的flag嘗試下)

3.-force_load

這個flag所做的事情跟-all_load其實是一樣的,只是-force_load需要指定要進行全部加載的庫文件的路徑,這樣的話,你就只是完全加載了一個庫文件,不影響其余庫文件的按需加載?

使用格式:-force_load(空格) $(SRCROOT)/路徑/靜態(tài)庫.a

{來自參考:http://www.itdecent.cn/p/7579eda7cbef,https://blog.csdn.net/ouyangtianhan/article/details/41007771}

二、當(dāng)編譯鏈接錯誤上方有提示:Undefined symbols for architecture i386 (x86_64)錯誤

架構(gòu)是神馬東東?CPU架構(gòu)是CPU廠商給屬于同一系列的CPU產(chǎn)品定的一個規(guī)范,主要目的是為了區(qū)分不同類型CPU的重要標示。模擬器上的架構(gòu)和真機上的架構(gòu)是不一樣的,模擬器和模擬器之間,真機和真機之間的架構(gòu)也是不同的。如果靜態(tài)庫的架構(gòu)和測試項目對應(yīng)的模擬器或真機上的架構(gòu)不對應(yīng)就會報“未定義的符號XXX架構(gòu)”, 由此可以得出模擬器上的靜態(tài)庫!

讓靜態(tài)庫支持所有模擬器對應(yīng)的架構(gòu)

Build Settings ?-> ?Build Active Architecture Only(只構(gòu)建活躍的架構(gòu))-> ?NO?

{來自參考:https://blog.csdn.net/liangliang2727/article/details/52941394}

三、當(dāng)編譯鏈接錯誤上方有提示:ld: -no_pie and -bitcode_bundle (Xcode setting ENABLE_BITCODE=YES) cannot be used together?錯誤

Build Setting ?-> ?Enable Bitcode ?-> ?NO?


============================================

要是有人遇到過其他鏈接錯誤并知道解決的,歡迎在評論區(qū)contribute~。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容