iOS duplicate symbol

duplicate symbol _OBJC_METACLASS_$_RXMLElement in:
    /.../Frameworks/libWintoneCardOCR.a(RXMLElement.o)
    /.../Frameworks/libWintonePlateIDPro.a(RXMLElement.o)
ld: 7 duplicate symbols for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

duplicate symbol(duplicate,重复)是一种常见的链接错误,常见问题及解决方法如下:

1、引入头文件出错,引入了xxx.m头文件,解决方法查看一下是否引用xxx.m头文件,改一下就行了。
2、类重复实现了,及有多个@implementation xxx,修改一下就可以了。
3、多人开发时一个项目中重复引入xxx.h两个相同文件,删除一个就可以了。
4、自己定义的类名与第三方类库中类名重复了,修改自己的就行了。
5、集成第三方API时Other Linker Flags项添加-all_load引起的冲突,解决办法:Targets选项下有Other linker flags 干掉-all_load参数, 再需要用-force_load加上文件路径,这样就可以避免冲突;(
-ObjC:加了这个参数后,链接器就会把静态库中所有的Objective-C类和分类都加载到最后的可执行文件中
-all_load:会让链接器把所有找到的目标文件都加载到可执行文件中,但是千万不要随便使用这个参数!假如你使用了不止一个静态库文件,然后又使用了这个参数,那么你很有可能会遇到ld: duplicate symbol错误,因为不同的库文件里面可能会有相同的目标文件,所以建议在遇到-ObjC失效的情况下使用-force_load参数。
-force_load:所做的事情跟-all_load其实是一样的,但是-force_load需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载 !)

6、其他错误类型,在target->build phases->compile sources中引入相同的xxx.m文件,搜索一下那个xxx.m是不是重复引入,如果重复引入,删除一个就好了,然后编译,还有错误你就在把xxx.m文件添加一个,因为删除时两个都删除了。

猜你喜欢

转载自blog.csdn.net/heqiang2015/article/details/82993310