
解决QZ-SDK静态库libRPToolLib.a中avfoundation.o文件和kxMovie依赖的ffmpeg静态库libavdevice.a函数重复定义的问题
在原来项目中导入全志v3相机的SDK静态库libRPToolLib.a,编译通过,但链接报错,具体如下:

问题描述:
libRPToolLib.a和libavdevice.a两个第三方库都包含avfoundation.o这个文件,这两个.o中定义了相同的函数名。C语言全局函数,名称不能重复。
解决方案:
在i386、x86_64 和 armv7、arm64四个平台下分别解压libRPToolLib.a这个库,分别删除4个平台.a中的avfoundation.o文件,然后再重新合并成新的libTPToolLib.a
参考文章:
具体做法:
1. 建个文件夹lib,把libRPToolLib.a 拷贝到目录下,查看libRPToolLib.a 是否为多架构.a
cd lib
lipo -info libRPToolLib.a
打印:
打印:
Architectures in the fat file: libRPToolLib.a are: i386 armv7 x86_64 arm64
结论:
libRPToolLib.a是多框架库,故在lib文件夹下分别建立i386 armv7 x86_64 arm64四个子文件夹,便于数据处理
2. 提取某个框架的.a
lipo libRPToolLib.a -thin armv7 -output armv7/libRPToolLib-armv7.a
3.当前在lib目录,cd到下级目录,并解压缩刚生产的.a
cd armv7 && ar xv libRPToolLib-armv7.a
4.找到冲突的包,删除avfoundation.o(可先在finder中找到并选中该avfoundation.o,执行如下命令后,再去finder中查看,该文件的确被删除了)
rm avfoundation.o
5. cd到上一级,并重新打包刚解压缩目录下所有的.o成为一个新的某个框架下的.lib(armv7平台包)
cd .. && ar rcs libRPToolLib-armv7.a armv7/*.o //将armv7/目录下所有.o打包成 libRPToolLib-armv7.a,存储在lib文件夹下
6. 重复以上步骤,处理i386/x86/armv7/arm64框架的.a
7. 合并为模拟器和真机通用的fat file类型的.a
lipo -create libRPToolLib-armv7.a libRPToolLib-arm64.a libRPToolLib-i386.a libRPToolLib-x86_64.a -output libRPToolLib.a
lipo -create libRPToolLib-armv7.a libRPToolLib-arm64.a libRPToolLib-i386.a libRPToolLib-x86_64.a -output libRPToolLib.a
主要的终端指令如下:
lipo libRPToolLib.a -thin armv7 -output armv7/libRPToolLib-armv7.a
cd armv7 && ar xv libRPToolLib-armv7.a
rm avfoundation.o
cd .. && ar rcs libRPToolLib-armv7.a armv7/*.o
lipo libRPToolLib.a -thin arm64 -output arm64/libRPToolLib-arm64.a
cd arm64 && ar xv libRPToolLib-arm64.a
rm avfoundation.o
cd .. && ar rcs libRPToolLib-arm64.a arm64/*.o
lipo libRPToolLib.a -thin i386 -output i386/libRPToolLib-i386.a
cd i386 && ar xv libRPToolLib-i386.a
rm avfoundation.o
cd .. && ar rcs libRPToolLib-i386.a i386/*.o
lipo libRPToolLib.a -thin x86_64 -output x86_64/libRPToolLib-x86_64.a
cd x86_64 && ar xv libRPToolLib-x86_64.a
rm avfoundation.o
cd .. && ar rcs libRPToolLib-x86_64.a x86_64/*.o
lipo -create libRPToolLib-armv7.a libRPToolLib-arm64.a libRPToolLib-i386.a libRPToolLib-x86_64.a -output libRPToolLib.a
lipo libRPToolLib.a -thin armv7 -output armv7/libRPToolLib-armv7.a
cd armv7 && ar xv libRPToolLib-armv7.a
rm avfoundation.o
cd .. && ar rcs libRPToolLib-armv7.a armv7/*.o
lipo libRPToolLib.a -thin arm64 -output arm64/libRPToolLib-arm64.a
cd arm64 && ar xv libRPToolLib-arm64.a
rm avfoundation.o
cd .. && ar rcs libRPToolLib-arm64.a arm64/*.o
lipo libRPToolLib.a -thin i386 -output i386/libRPToolLib-i386.a
cd i386 && ar xv libRPToolLib-i386.a
rm avfoundation.o
cd .. && ar rcs libRPToolLib-i386.a i386/*.o
lipo libRPToolLib.a -thin x86_64 -output x86_64/libRPToolLib-x86_64.a
cd x86_64 && ar xv libRPToolLib-x86_64.a
rm avfoundation.o
cd .. && ar rcs libRPToolLib-x86_64.a x86_64/*.o
lipo -create libRPToolLib-armv7.a libRPToolLib-arm64.a libRPToolLib-i386.a libRPToolLib-x86_64.a -output libRPToolLib.a
操作截图:
