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 🤘