在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 项目源文件路径
时间: 2024-10-10 03:54:47