美文网首页
(iOS收集)00001_两个静态库发生.o冲突_2018-09

(iOS收集)00001_两个静态库发生.o冲突_2018-09

作者: lyh165 | 来源:发表于2018-09-26 21:49 被阅读0次

文丨lyh165
发布时间:2018-09-26 (周三 广州/晴)
最后更新时间:2018-09-26 (周三 广州/晴)


参考文章1_本人集成连连支付&支付宝解决.a静态库时冲突

使用不同的第三方静态库,发现文件冲突。也就是循环引用
由于.a文件我们无法到里面删除指定的引用。我们只能解剖.a文件。并且删除冲突.o文件。

libSVProgressHUD.a
liblibVideo.a

上面最主要出现这种原因的是:<两个静态库都使用了同样的开源第三库>[SVProgressHUD下的SVProgressAnimatedView]

一、找到两个发生冲突的.a文件
删除其中一个所包含的文件即可
比如
我项目使用了Cocoapods集成了 SVProgressHUD
通过Cocoapods安装之后是 libSVProgressHUD.a

我项目有些功能也适用到liblibVideo.a的部分功能


问题是两个都是静态文件.
1.我无法弃用SVProgressHUD.a 是因为我项目可能多处使用到SVProgressHUD。
所以只能在liblibVideo.a里面进行删除。

最终解决:参考链接里面的
1、现象(如何出现这个问题)
2、解决步骤(如何解决这个问题)

解决问题大概思路是
1.拿到原始的.a文件做一个备份处理。然后在副本上面处理
2.(要做的最终效果)在副本的.a文件拆分出几个平台下的静态文件进行解压删除指定文件,并且转换成平台文件。再合并平台文件
3.每个平台下的.a文件都需要重复操作。
3.1 获取副本.a文件下的平台.a文件(比如有armv7、armv7s、i386、x86_64)
3.2 然后解剖平台.a文件 (属称:解压)生产了很多的.o 文件。删除冲突的文件。并且再次生成一个新的平台.a文件
3.3 合并多个平台的.a文件

0、查看liblibVideo.a静态库适用于哪些平台的(指令是lipo -info 静态库) lipo -info liblibVideo.a
1、查看liblibVideo.a静态库下包含了哪些编译生成的.o文件(指令是ar -t 静态库)ar -t liblibVideo-armv7.a
2、解压liblibVideo.a静态库下包含了哪些编译生成的.o文件(指令是ar xv 静态库)ar xv libx-armv7.a
3、删除liblibVideo.a静态下指定的.o文件(指令是 rm 文件)rm SVProgressHUD.o SVRadialGradientLayer.o SVProgressAnimatedView.o SVIndefiniteAnimatedView.o
4、合并各个平台的.a静态库文件(指令是lipo -create 静态库1 静态库n)lipo -create liblibVideo-arm64.a liblibVideo-armv7.a liblibVideo-i386.a liblibVideo-x84_64.a -output liblibVideo.a

相关文章

网友评论

      本文标题:(iOS收集)00001_两个静态库发生.o冲突_2018-09

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