问题
集成项目SDK的时候用到公司的两个静态库,在没有添加other link flags -ObjC
之前,编译运行一切正常。一旦加上这个配置项后就报duplicate symbol错误,在错误描述中可以看到两个静态库都包含来命名相同都.o
文件。
解决方案
- 由于都是公司提供的库而且命名一样,决定对一个库删除对应
.o
文件后重新打包静态库
- 首先根据错误信息是arm64的库冲突,所以解压出arm64库
1. lipo liba.a -thin arm64 -output liba-arm64.a #其中liba-arm64.a为抽离出来的库文件
2. 创建一个新文件夹A,进入该文件夹下面
3. ar -x liba-arm64.a完整路径
4. 现在A文件夹中就有抽离出来的一堆.o文件来
- 在抽离后的文件夹中找到造成冲突的文件并删除
- 删除后重新打包库
libtool -static -o 新的库文件路径/libarm64.a *.o
(该命令需要在A文件夹中进行) - 抽离出其它库文件(例如有armv7.a),然后合并静态库
lipo -creata -output liba.a armv7.a libarm64.a
- 用新合成的库替换原先的库
网友评论