IOS - 解决.a中文件冲突

作者: 囧rg | 来源:发表于2016-08-03 20:00 被阅读2426次

前言

今天引入一个“个推”的库,结果悲剧的发现,zip.o 、unzip.o、mztools.o和 mztools.o文件冲突,导致编译失败。
后来在网上查了查解决办法。

  1. 删除项目中重复的类,换一个别的实现(不太现实)
  2. 对冲突的文件重命名
  3. 删除.a中,冲突的文件

前两种不做解释,主要针对第三种方法详解。

解决步骤

先拷贝项目中的.a文件出来。(不要问我.a文件在什么位置)

第一步:查看报信息

lipo -info libx.a

例如 输出结果:
Architectures in the fat file: libGeTuiSdk-1.4.3-noidfa.a are: armv7 i386 x86_64 arm64

如果提示fat file,那么代表这个包是支持多平台的,例如armv7,armv7s,i386等,这需要我们逐一做解包重打包操作。

第二步:创建文件夹

由于到合并多个包,所以需要先分好类后,再进行此操作

mkdir armv7

第三步:提取armv7平台的包

在第一步中,可以看到支持的各个平台。

lipo libx.a -thin libGeTuiSdk-1.4.3-noidfa.a -output armv7/libgt-armv7.a

第四步:解压.a文件

可以使用命令先进行查看.a包中的文件列表

ar -t armv7/libgt-armv7.a

解压.a包(内部都是.o文件)

cd armv7
ar xv libgt-armv7.a

第五步:删除冲突文件

针对minizip来说,我在个推包中,删除如下几个文件

rm zip.o
rm unzip.o
rm mztools.o
rm mztools.o

第六步:重新打包

删除后,重新把.o文件,打成.a包。

cd ..
ar rcs libgt-armv7.a armv7/*.o


第七步:根据支持平台类型,重复以上的操作,直到全部平台都操作一遍。


第八步:合并.a包,并替换文件

合并的新包,替换之前项目中的.a包

lipo -create libgt-armv7.a libgt-arm64.a libgt-i386.a libgt-x86_64.a -output libGeTuiSdk-1.4.3-noidfa-nominizip.a

步骤总结

  1. 查看
    architectureslipo -info libx.a
  1. 如果是fat file,处理成non-fat
    lipo libx.a -thin armv7 -output libx-armv7.a
  2. 解压出object file
    ar xv libx-armv7.a
  3. 打包object file
    ar rcs libx.a *.o
  4. 生成Fat file
    lipo -create Libarmv7.a -output libx.a
  5. 合并.a文件
    lipo -create Libarmv6.a Libarmv7.a -output Lib.a

下载地址:libGeTuiSdk-1.4.3-noidfa-nominizip.a

相关文章

网友评论

    本文标题:IOS - 解决.a中文件冲突

    本文链接:https://www.haomeiwen.com/subject/chzqsttx.html