iOS Developer

有关.a(静态库)冲突问题

2017-05-02  本文已影响61人  顺情风

有关怎么解决冲突的文章有很多,我这里在他们的基础上对一些新手解惑,怎么查看冲突。

1、查看报错:按照1、2、3、4顺序点击点击红色位置才可以查看到32个冲突的具体位置:

必须按照1、2、3、4顺序点击

2、按照1要求点击后就可以看到,具体冲突如下:

具体冲突

如上图所示:

每一个红色方框就是一条冲突信息,上面的方框说明了:libEZOpenSDK.a里面的mp2dec.o和libplayctrl.a里面的mp2dec.o重复了。也就是两个.a文件都引入了同一个.o文件。所以产生冲突。

3、冲突解决办法:

主要逻辑:把这两个.a文件“中的一个”.a文件,把.a文件生成对应架构的.a文件,然后把这个.a文件解压缩成.o文件,删除2里面看到的重复的.o文件。然后再把这个对应.o文件合成对应架构的.a文件,再把多个架构的.a文件合成一个.a文件。最后把项目里的.a文件替换成自己处理过的.a文件。

3.1、 查看architectures:      lipo  -info  libx.a

可以看到armv7/arm64等字眼。就说明这个libx.a包含了几种架构包。

3.2、 根据1里面含有几种架构包就执行相应命令

以armv7为例:lipo  libx.a  -thin armv7  -output  libx-armv7.a

在libx.a所在文件夹得到libx-armv7.a

3.3、 解压出.a文件所包含的.o文件:ar  xv  libx-armv7.a

可以看到libx-armv7.a所在文件夹出现了很多.o文件。把2中看到的需要删除的.0文件删除掉。

3.4、 再把这些.o文件打包成对应架构的.a文件:  ar  rcs   libx.a   *.o

3.5、 针对其它架构重复3.1到3.4,会得到多个架构的.a文件。

3.6、把多个架构的.a文件合成一个.a文件:  lipo  -create  Libarmv6.a  Libarmv7.a  -output  Lib.a

上一篇 下一篇

猜你喜欢

热点阅读