如何解决项目中.a文件中的.o冲突
项目中使用了yuemengsdk.a 现又加入了百度 libbaiduNaviSDK.a 有了冲突
我们需要把.a文件中的.o文件删除
第一步
先将项目备份..万一没玩好..去哪说理~~
第二步
在桌面新建文件夹 把需要的.a文件放在新建的文件夹中
cd到该目录下查看该文件的cup架构命令行如下
fenghedeMacBook-Pro:合并 fenghe$ lipo -info libbaiduNaviSDK.a Architectures in the fat file: libbaiduNaviSDK.a are: i386 armv7 x86_64 arm64
我们看到支持4种 i386 armv7 x86_64 arm64 在这里我们介绍下
因为该.a中包含着4种架构,所以我们要分别对他们读取并拆分
执行命令行对.a文件进行arm64架构读取
lipo libbaiduNaviSDK.a -thin arm64 -output libbaiduNaviSDK_arm64.a
然后用同样的方法对其他三种架构进行读取
读取完成后的效果如下
因为我们要对不同类型的架构进行拆分.拆分后会有很多文件,所以我们将每种架构新建个文件夹放入,防止拆分后混淆
然后使用命令行分别对不同架构进行拆分并删除其中重复的.o文件
cd 到arm64文件夹目录下 执行
ar -x libbaiduNaviSDK_arm64.a
分别在4个文件夹目录下执行以上命令行
执行完毕就代表拆分完毕.然后搜索一下报错的.o文件并删除
紧接着合并文件(此时之前根目录下的libbaiduNaviSDK.a文件就可以删除了,因为合并后会生成一个新的文件.)
在arm64文件目录下执行
fenghedeMacBook-Pro:arm64 fenghe$ libtool -static -o ../libbaiduNaviSDK_arm64.a *.o
执行完毕后会在根目录下生成libbaiduNaviSDK_arm64.a文件,这就是合并完成的文件. 还需要在其他三个文件夹下执行对应的上述命令行 执行完毕效果如下
最后将所有架构类型的.a进行终极合并
cd 到根目录下 执行
fenghedeMacBook-Pro:合并 fenghe$ lipo -create -output libbaiduNaviSDK.a libbaiduNaviSDK_arm64.a libbaiduNaviSDK_armv7.a libbaiduNaviSDK_i386.a libbaiduNaviSDK_x86_64.a
执行完毕后会在根目录下生成新的.a文件.将其替换掉项目中的即可
欢迎大家加入我的iOS(OC/swift/flutter)技术群 不闲聊只技术交流 闲聊勿扰了
201708926