問題描述: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引入工程中,在模擬器和真機上分別進行測試,都可經過編譯。