首页 > 代码库 > iOS项目中引用第三方库引发冲突的解决方法

iOS项目中引用第三方库引发冲突的解决方法

在iOS程序开发过程中,经常会碰见引用第三方库出现类名重复使用,导致冲突。

解决方案

1、使用命令将.a库中的相同的包移除

2、在编译链接项中添加-dead_strip项

   补充说明:

  -dead_strip:删除多余的库符号;

  -all_load:让链接器把所有找到的目标文件都加载到可执行文件中;

  -force_load:所做的事情跟-all_load其实是一样的,但是-force_load需要指定要进行全部加载的库文件的路径

 

使用命令将.a库中的相同的包移除步骤如下:

1、创建临时文件夹(用于存放各平台解压后的.o文件),将.a库复制到临时文件夹中

2、建立一个子目录armv7:mkdir armv7

3、取出armv7平台的包:lipo xxx.a -thin armv7 -output armv7/xxx-armv7.a

4、查询库中所包含的文件列表(查看是否存在需进行移除的.o文件):ar -t armv7/xxx-armv7.a

5、解压出object file(即.o后缀文件):cd armv7 && ar xv xxx-armv7.a

6、找到冲突的.o后缀的文件,删除:rm xxx.o

7、重新打包object file(在此操作之前可使用【4】中命令确认是否成功移除):cd .. && ar rcs xxx-armv7.a armv7/*.o

8、将其他几个平台(i386,arm64,x86_64)包逐一按照【2-7】操作

9、重新合并.a文件:lipo create xxx-armv7.a xxx-i386.a xxx-arm64.a xxx-x86_64.a -output xxx.a

10、拷贝到项目中覆盖源文件:cp xxx.a 项目源文件路径

iOS项目中引用第三方库引发冲突的解决方法