由于简书经常打不开,或者打开慢,不靠谱,还是把文章迁移到优快云吧
lipo命令的使用
例如我有个A.framework 和 B.framework,A、B中使用了同样的代码(例如:AFN),现在项目中需要用到A、B两个库,编译的时候会报错。提示重复链接,解决方案就是从A或者B中删除掉一个AFN代码。现在从A中删除,假设A就是TXLiteAVSDK_Professional.framework
删除重复的代码
1.先查看TXLiteAVSDK_Professional.framework支持的架构:
可以把TXLiteAVSDK_Professional.framework理解成一个文件夹,内部结构如下:

先cd进入TXLiteAVSDK_Professional.framework内
cd TXLiteAVSDK_Professional.framework/
然后
ls
看到目录结构如下:
Headers Modules
Info.plist TXLiteAVSDK_Professional
查看TXLiteAVSDK_Professional支持的架构:
lipo -info TXLiteAVSDK_Professional
发现支持4种架构:
Architectures in the fat file: TXLiteAVSDK_Professional are: armv7 i386 x86_64 arm64
现在把4种架构单独拆出来:(这是拆arm64,其他类似,arm64修改为x86_64)
lipo -thin arm64 TXLiteAVSDK_Professional -output TXLiteAVSDK_Professional_arm64.a
然后查看打包的.o
最好新建个文件夹:arm64
把TXLiteAVSDK_Professional_arm64.a移动到arm64文件夹中,然后:
cd arm64
ar -x TXLiteAVSDK_Professional_arm64.a
就会看到arm64文件夹中有很多.o文件,删除想删除的文件即可。
2.有时候执行ar -x TXLiteAVSDK_Professional_arm64.a 会提示 Inappropriate file type or format 这是因为 当前的文件是MACH-O类型的。
可通过下面代码查看文件类型:
file TXLiteAVSDK_Professional_arm64.a
删除多余的架构
先cd进入TXLiteAVSDK_Professional.framework内
cd TXLiteAVSDK_Professional.framework/
查看TXLiteAVSDK_Professional支持的架构:
lipo -info TXLiteAVSDK_Professional
发现支持4种架构:
Architectures in the fat file: TXLiteAVSDK_Professional are: armv7 i386 x86_64 arm64
假设我们想删除i386架构,则执行命令
lipo -remove i386 TXLiteAVSDK_Professional -o TXLiteAVSDK_Professional
这样i386架构就被删除了。
本文详细介绍了如何使用lipo命令解决iOS项目中因多个framework包含相同代码导致的编译错误。通过具体步骤演示了如何查看和管理framework支持的架构,以及如何删除不必要的架构和代码,确保项目的顺利编译。
1952

被折叠的 条评论
为什么被折叠?



