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都加載進(jìn)來勒魔。這樣編譯之后的app會變大(因為加載了其他的objc代碼進(jìn)來)甫煞。但是如果靜態(tài)庫中有類和category的話只有加入這個flag才行。
2.-all_load
這個flag是專門處理-ObjC的一個bug的冠绢。用了-ObjC以后抚吠,如果類庫中只有category沒有類的時候這些category還是加載不進(jìn)來。變通方法就是加入-all_load或者-force-load弟胀。-all_load會強制鏈接器把目標(biāo)文件都加載進(jìn)來楷力,即使沒有objc代碼。
(PS:出現(xiàn)錯誤的原因是不是項目就是用了這個flag呢孵户!建議換成下面的flag嘗試下)
3.-force_load
這個flag所做的事情跟-all_load其實是一樣的萧朝,只是-force_load需要指定要進(jìn)行全部加載的庫文件的路徑,這樣的話夏哭,你就只是完全加載了一個庫文件检柬,不影響其余庫文件的按需加載?
使用格式:-force_load(空格) $(SRCROOT)/路徑/靜態(tài)庫.a
{來自參考:http://www.reibang.com/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的重要標(biāo)示。模擬器上的架構(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~磁餐。