解決Undefined symbols for architecture arm64問題

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工程所需要的地方,然后通過下圖方式添加。

添加文件

兩種方式的區別是,第一種方式所加的類、靜態庫和bundle資源文件不會自動加入到Compile Sources、Link Binary With Libraries和Copy Bundle Resources。以至于XXX工程根本找不到所加的文件。

資源鏈接

所以必須通過第二種方式導入文件。

其他造成該問題的可以檢查Other Linker Flags、Header Search Paths和Library Search Paths的路徑是否正確。

鏈接標志


搜索路徑

-ObjC:加了這個參數后,鏈接器就會把靜態庫中所有的 Objective-C 類和分類都加載到最后的可執行文件中。

-all_load:會讓鏈接器把所有找到的目標文件都加載到可執行文件中,但是千萬不要隨便使用這個參數!假如你使用了不止一個靜態庫文件,然后又使用了這個參數,那么你很有可能會遇到 ld: duplicate symbol 錯誤,因為不同的庫文件里面可能會有相同的目標文件,所以建議在遇到 -ObjC 失效的情況下使用 -force_load 參數。

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 轉至元數據結尾創建: 董瀟偉,最新修改于: 十二月 23, 2016 轉至元數據起始第一章:isa和Class一....
    40c0490e5268閱讀 1,768評論 0 9
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,242評論 25 708
  • Ubuntu的發音 Ubuntu,源于非洲祖魯人和科薩人的語言,發作 oo-boon-too 的音。了解發音是有意...
    螢火蟲de夢閱讀 99,554評論 9 467
  • 我羨慕那些怎么吃都不胖但又沒得甲亢的,還有那些喝完一斤腿都一點不晃的。他們對于我來說都是神一樣的存在。 我周圍有那...
    管飛機的舒克閱讀 192評論 4 0
  • 五個黑衣人又領來了五個百姓,百姓痛哭著,男丁怒睜雙目,而老弱婦孺皆淚涕滿臉。將軍又喊道:“鳴遷,縱情劍到底在哪里?...
    四驅汽車客閱讀 201評論 1 1