Undefined symbols for architecture x86_64
在原生 iOS 開發中,這個錯誤信息,應該或多或少的會碰到過:node
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_XXX", referenced from:
__XXX in TestClass.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
複製代碼
這個錯誤信息的意思大體是:在TestClass
裏面有一些不認識的符號
,說白了,就是在TestClass
這個類裏面的某些方法或者使用的某些類不能被識別,在這個類裏面一一進行排除,不難找到問題所在。json
通常解決辦法:添加相應的靜態庫,或者 framework,今天筆者並不是要解決 iOS 原生開發的問題,而是解決 ReactNative 中原生組件的問題,若是是解決原生問題,請移步 here。bash
筆者針對友盟推送的 SDK 作了 RN 組件開發,將原生SDK內嵌在組件內,這樣在RN中使用,就沒必要再關心友盟的 SDK 了,真正作到 ReactNative 插件化開發。ui
敲上幾行命令,整個環境已經搭建好,在沒有導入 SDK 以前,編譯是 OK 的,導入 SDK 以後編譯也沒問題,實際表現跟本身預想的差很少,這個組件應該很快就會作好。spa
想法是美好的,現實是殘酷的。插件
在我寫好調用 SDK 內的方法以後,開始編譯,WTF 什麼鬼,這個錯誤什麼狀況,嚇得我趕忙去檢查代碼,該註釋的註釋,該還原的還原。編譯->沒問題啊!code
最後經過比對其餘工程,最後找到了解決的辦法。由於筆者的組件中使用了友盟 (第三方) framework 才引發的這個編譯問題,因此最後的解決方法就是:Xcode -> Build Settings -> Other Linker Flags
中添加 -framework "xxx"
,好比你的是 TestDemo.framework
,這裏添加的就是 -framework "TestDemo"
component
PS:在RN項目內的package.json
中引用第三方組件使用 "xxx-component": "../xxx/"
,這樣寫,會連同組件package.json
所在當前目錄下全部文件一塊兒Copy到RN項目node_moudle/xxx-component
目錄,RN在運行會報出一些duplicate xxx
這樣的錯誤信息,這個時候,須要在node_moudle/xxx-component
這個目錄下刪除不須要的文件。開發
若是剛好你碰到了這個問題,又剛好看到了這篇文章,那恭喜你,找對地方了!若是沒有碰到這些煩人的問題,那你簡直太幸運了!get
以上但願對你有所幫助 have fun 🤘