iOS-集成多个SDK内部文件重复冲突解决

最近使用Hbuilder集成一个项目,集成了很多sdk,发现有两个sdk都是用了Masonry第三方库布局,然后编译报错,关键字:duplicate symbol ,出现这个就表示有重复文件了,我们需要把其中的一个sdk文件中生成的重复的.o文件一一删除即可,如下则为相关位置,我将把Masonry.framework的相关重复文件一一移除合并解决冲突问题。

1

步骤如下:

1.打开终端cd到所要修改的sdk所载文件目录(最好备份一个出来,改完再替换)

2.查看静态库文件包含的架构:

命令: lipo -info  xxxx.a 

主要看看总共有哪些架构有冲突,后面需要一一从相关架构移除。如下

根据结果可以看出包含armv7 i386 x86_64  arm64 这几个库,冲突文件必须从必须从每个架构的库里面相应删除才行,其中x86_64为模拟器的架构,如果不需要模拟器调试,嫌麻烦x86_64可以不管。具体指令集相关可以看这篇文章:https://www.jianshu.com/p/5d1ce5d3d8d6

3.分离出相应架构的库:

命令:lipo -thin armv7 XYRiskAssessment-iOS-1.0.0.a -output armv7.a

例:lipo -thin armv7 Masonry -output Masonry-armv7

然后我们就可以看到我们的sdk目录下会多一个Masonry-armv7的库,如下:

3

同样的方法我们可以分离出i386  x86_64   arm64 文件分离完成后如下:


4


4.查看库中所包含的文件列表

命令为:ar -t  xxx.a

例: ar -t  Masonry-armv7

4

5.如果不清楚两个sdk都有哪些文件重复,可以按照以上步骤,查看下另一个重复的sdk都包含哪些文件,如下所示和Masonry.framework重复的DCUniVideoPublic.framework分离出armv7架构的文件列表,其实也可以在xcode编译重复信息里面找到相关.o文件,看个人喜好。

5

6.接着我们就要从每个架构文件中,删除相关的冲突.o文件

命令::ar -d -sv XXXXX-armv7.a  XXXX.o

例:

ar -d -sv Masonry-armv7 MASCompositeConstraint.o

ar -d -sv Masonry-armv7 MASViewConstraint.o

6

7.最后一步:把armv7 i386  x86_64   arm64 所有架构的重复文件按照上面方法删除完成后。我们要把这几个架构合并到原来的库里面

和并静态库的命令:

lipo -create XXXXX-armv7.a XXXXX-armv7s.a (加上所有架构的编译库) -output XXXXX-NOFfmpeg.a

例:

lipo -create Masonry-x86_64 Masonry-armv7 Masonry-i386 Masonry-arm64 -output Masonry

最后将这个新生成的静态库文件替换掉之前的,发现冲突解决。

注意:当把Masonry相关冲突.o文件移除后,这个移除合并后的兼容版本是不能单独拿去使用的,单独使用以上移除的.o文件会出现丢失的编译错误,因为你已经移除了。

觉得有帮助留个赞再走呗 ~

你可能感兴趣的:(iOS-集成多个SDK内部文件重复冲突解决)