两个静态库包含同一个三方库导致报错

由于简书经常打不开,或者打开慢,不靠谱,还是把文章迁移到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理解成一个文件夹,内部结构如下:
framework内部.png

先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架构就被删除了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值