问题描述:opencv2.framework与BaiduMapAPI_Base.framework中部分.o文件冲突,致使编译不能经过架构
某些通用处理库被百度BaiduMapAPI_Base.framework和opencv2.framework 都引用进去 ,这样致使的问题就是当接入百度地图的app再次引入opencv.framework的时候,就会报duplicate symbol … in的错误。app
cd opencv2.framework lipo -info opencv2
执行完以后输出以下:工具
Architectures in the fat file: opencv2 are: armv7 armv7s i386 x86_64 arm64
从CPU的架构能够看出该framework同时支持真机和模拟器测试
2. 把每种架构对应的文件提取出来进行分析处理,首先以armv7架构为例,运行下面命令解压armv7架构下对应的文件spa
lipo opencv -thin armv7 -output cv.armv7
运行成功以后在当前路径下生成一个cv.armv7文件,如今用ar命令来查看该文件中的.o文件.net
ar -t cv.armv7
world_init.o algorithm.o alloc.o arithm.o array.o cmdparser.o convert.o copy.o datastructs.o drawing.o dxt.o gl_core_3_1.o glob.o gpumat.o lapack.o mathfuncs.o matmul.o matop.o matrix.o opengl_interop.o opengl_interop_deprecated.o out.o parallel.o persistence.o rand.o stat.o system.o tables.o flann.o miniflann.o accum.o approx.o canny.o clahe.o color.o contours.o convhull.o corner.o cornersubpix.o deriv.o .......
一样方法分析BaiduMapAPI_Base.framework, 发现重复的文件以下code
adler32.o compress.o crc32.o deflate.o inflate.o
执行删除操做,依次删除这五个文件blog
ar d cv.armv7 adler32.o ...
至此,armv7架构下的文件“清理”完毕!ip
3. 重复步骤2,将其余CPU架构文件夹下的内容作相同操做。此步骤结束以后,会有cv.armv七、cv.armv7s、cv.arm6四、cv.i386和cv.x86_64五个删除重复.o后的文件。rem
4. 运行下面命令合成新的opencv2包
lipo -create -output opencv2 cv.armv7 cv.armv7s cv.arm64 cv.i386 cv.x86_64
命令运行成功以后大功告成,此时将新的opencv2.framework引入工程中,在模拟器和真机上分别进行测试,都可经过编译。