如何解决项目中.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

 

posted @ 2019-07-31 16:03  港吧休  阅读(552)  评论(0编辑  收藏  举报