由于简书经常打不开,或者打开慢,不靠谱,还是把文章迁移到CSDN吧
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架构就被删除了。