文丨lyh165
发布时间:2018-09-26 (周三 广州/晴)
最后更新时间:2018-09-26 (周三 广州/晴)
使用不同的第三方静态库,发现文件冲突。也就是循环引用
由于.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