转自:http://www.cnblogs.com/rayshen/p/5160218.html
最近在开发项目时编译三方.a时出现了冲突,原因是存在duplicate symbol。
<1>模拟器编译时,应用的即时通讯模块采用的三方库(容联云),和视频监控模块采用的三方库(海康威视)之间有冲突,无法编译通过。
<2>真机编译时,假如对other linker flags设置为-ObjC,海康威视自身的两个.a文件存在冲突,假如不设置,CorePlot框架运行时会出现“selector not recognized”然后应用崩溃。
我真是头都大了啊……
可以看到在针对模拟器架构下(x86_64)的文件会产生如下编译错误:
这种情况一般都是文件里面使用C语言定义的全局变量名或是函数名,在导入的时候因为重复产生了冲突。
解决的方法:
1.对项目buildsetting里的other linker flags进行修改。
(参考下面的博客内容)
2.假如1不行,那只能重新打包三方库了。
(删除SDK内的重复的.o重新打包,详细见:http://blog.csdn.net/djl4104804/article/details/43099061)
other linker flags:
它的设置关乎到项目编译时的链接方式。
根据一篇博客内容顺便补脑下编译过程:
“
从C代码到可执行文件经历的步骤是:源代码 > 预处理器 > 编译器 > 汇编器 > 机器码 > 链接器 > 可执行文件
在最后一步需要把.o