Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_XXX", referenced from: someFile
ld: symbol(s) not found for architecture arm64
很多人都遇到過引用文件報錯的問題庄岖,之所以會造成這個問題,主要還是導入文件時的步驟上出了問題角骤。
比如你需要將所在YYY工程的A文件引入你的XXX工程隅忿,此時你有兩種操作方式。
1.打開YYY工程的A文件的文件夾邦尊,將A文件直接拖拽到XXX工程背桐,此時會彈出下圖,直接添加蝉揍。
2.打開YYY工程的A文件的文件夾链峭,將A文件復制到XXX工程所需要的地方,然后通過下圖方式添加又沾。
兩種方式的區(qū)別是弊仪,第一種方式所加的類熙卡、靜態(tài)庫和bundle資源文件不會自動加入到Compile Sources、Link Binary With Libraries和Copy Bundle Resources励饵。以至于XXX工程根本找不到所加的文件再膳。
所以必須通過第二種方式導入文件。
其他造成該問題的可以檢查Other Linker Flags曲横、Header Search Paths和Library Search Paths的路徑是否正確喂柒。
-ObjC:加了這個參數(shù)后,鏈接器就會把靜態(tài)庫中所有的 Objective-C 類和分類都加載到最后的可執(zhí)行文件中禾嫉。
-all_load:會讓鏈接器把所有找到的目標文件都加載到可執(zhí)行文件中灾杰,但是千萬不要隨便使用這個參數(shù)!假如你使用了不止一個靜態(tài)庫文件熙参,然后又使用了這個參數(shù)艳吠,那么你很有可能會遇到 ld: duplicate symbol 錯誤,因為不同的庫文件里面可能會有相同的目標文件孽椰,所以建議在遇到 -ObjC 失效的情況下使用 -force_load 參數(shù)昭娩。
-force_load:所做的事情跟 -all_load 其實是一樣的,但是 -force_load 需要指定要進行全部加載的庫文件的路徑黍匾,這樣的話栏渺,你就只是完全加載了一個庫文件,不影響其余庫文件的按需加載锐涯。