iOS 中Undefined symbols for architecture x86_64
在原生 iOS 開發中,這個錯誤資訊,應該或多或少的會碰到過:
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
這個類裡面的某些方法或者使用的某些類不能被識別,在這個類裡面一一進行排除,不難找到問題所在。
一般解決辦法:新增相應的靜態庫,或者 framework,今天筆者並非要解決 iOS 原生開發的問題,而是解決 ReactNative 中原生元件的問題,如果是解決原生問題,請移步 here。
筆者針對友盟推送的 SDK 做了 RN 元件開發,將原生SDK內嵌在元件內,這樣在RN中使用,就不必再關心友盟的 SDK 了,真正做到 ReactNative 外掛化開發。
敲上幾行命令,整個環境已經搭建好,在沒有匯入 SDK 之前,編譯是 OK 的,匯入 SDK 之後編譯也沒問題,實際表現跟自己預想的差不多,這個元件應該很快就會做好。
想法是美好的,現實是殘酷的。
在我寫好呼叫 SDK 內的方法之後,開始編譯,WTF 什麼鬼,這個錯誤什麼情況,嚇得我趕緊去檢查程式碼,該註釋的註釋,該還原的還原。編譯->沒問題啊!
最後通過比對其他工程,最後找到了解決的辦法。因為筆者的元件中使用了友盟 (第三方) framework 才引起的這個編譯問題,所以最後的解決方法就是:Xcode -> Build Settings -> Other Linker Flags
中新增 -framework "xxx"
,比如你的是 TestDemo.framework
,這裡新增的就是 -framework "TestDemo"
PS:在RN專案內的package.json
中引用第三方元件使用 "xxx-component": "../xxx/"
,這樣寫,會連同元件package.json
所在當前目錄下所有檔案一起Copy到RN專案node_moudle/xxx-component
目錄,RN在執行會報出一些duplicate xxx
這樣的錯誤資訊,這個時候,需要在node_moudle/xxx-component
這個目錄下刪除不需要的檔案。
如果恰好你碰到了這個問題,又恰好看到了這篇文章,那恭喜你,找對地方了!如果沒有碰到這些煩人的問題,那你簡直太幸運了!
以上希望對你有所幫助 have fun ?