前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS 静态库.a冲突解决

iOS 静态库.a冲突解决

作者头像
清墨
发布2019-07-01 17:49:22
2.1K0
发布2019-07-01 17:49:22
举报
文章被收录于专栏:清墨_iOS分享清墨_iOS分享

近期项目中要集成直播的sdk,项目配置完成后编译报了如下错误:

1081561530148_.pic_hd.jpg

从图中可以知道我去了哪里(前面面试总结文章有人好奇)。 回到正题,以前我是有过专门做SDK的经验,所以像这种sdk报错遇到的不少,如图有价值也很明显的问题点在于:

代码语言:javascript
复制
duplicate symbol xxxx in xxxx

这种问题一般都是文件里面使用C语言定义的全局变量名或是函数名,在导入的时候因为重复产生了冲突。 基于此往后看,可以找出重复的文件信息,上图是 SAMKeychain 和 SAMKeychainQuery,解决方案就是从.a中把这些重复的.o删除。(附带一个不高级方法,若冲突的文件你能修改,也可以直接改名)

OK,开始解决问题,解决问题还得从我们导入的第三方静态库入手,我们用的直播sdk,先用命令行查看它的相关信息:

代码语言:javascript
复制
cd /Users/zlwh/Desktop/微吼直播sdk 
lipo -info libVHallSDK.a
Architectures in the fat file: libVHallSDK.a are: armv7 i386 x86_64 arm64 

这里插播一下: arm64,armv7s,armv7,他们是ARM处理器的指令集,是在手机上的 i386|x86_64 是Mac处理器的指令集,i386表示支持模拟器运行

image.png

他们的sdk有说明,只支持iphone 5s以上的手机,所以在sdk中没有打包armv7s的架构。我们在命令行中得到的信息 Architectures in the fat file: libVHallSDK.a are: armv7 i386 x86_64 arm64 看好这个fat,fat file表示这个库里面合并了多于1个框架。而删除.0不能在这种fat file里,所以我们还得从库中拆分出arm64类型的.a

代码语言:javascript
复制
lipo libVHallSDK.a -thin arm64 -output lib64.a

这行命令运行后,我们的文件夹中会多出一个lib64.a

image.png

接着我们再查看lib64.a的相关信息:

代码语言:javascript
复制
lipo -info lib64.a
Non-fat file: lib64.a is architecture: arm64

此时它已经是一个只有arm64框架的.a了,接下来我们就可以执行删除.o的命令了

代码语言:javascript
复制
ar -d lib64.a SAMKeychain.o
ar -d lib64.a SAMKeychainQuery.o

这时候我们得到的就是剔除了两个重复.o的.a库。 把它拖入工程替换原有的.a,再运行就没有问题了。

以上问题就解决了,这里总结一些lipo命令: 1.依次查看所有需要合并的lib库所支持的框架类型 lipo -info xxx.a

2.将lib库拆分出不同类型的.a(armv7、armv7s、i386等)(i386表示支持模拟器) lipo xxx.a -thin arm64 -output xxx.a lipo xxx.a -thin armv7s -output xxx.a

3.删除.a库中的.o ar -d xxx.a xxx.o

4.分离出目标文件(.o) ar -x ../xxx.a

5.从.o文件中合并成静态库: libtool -static -o ../xxx.a *.o

6.合并静态库 lipo -create 111.a 222.a 333.a -output 444.a (表示将111.a、222.a、333.a合并成444.a)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.06.26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档