iOS端 TXLiteAVSDK 与其它三方库冲突报错问题

RoaringMeIP属地: 广东
字数 636阅读 2,155

问题场景

iOS 端在集成腾讯云视频服务客户端音视频SDK时,与开发者自己工程中的第三方库冲突,导致编译报错。

解决方法

场景1

编译报dumplicate symbols错误。

image

解决办法

一般是因为 other linker flags 设置了-all_load,去掉这个,只需要设置-ObjC

场景2

ffmpeg 和 ijk 相关冲突。

解决办法

全功能专业版和独立播放器版、企业版等版本中都包含有 ffmpeg 和 ijkplayer,如果您的项目中已经包含相关开源库,推荐使用 精简版符号重命名版

场景3

工程里面与 TXLiteAVSDK 内部引用的库重复。

解决办法

直接删除本地工程里面重复的库文件。

场景4

工程里面三方库与TXLiteAVSDK有相同的.o文件。


image

解决办法

这种情况发生在不能直接删除对应的三方库场景,那么可以删除这个三方库里面冲突的.o文件然后重新打包,就不会冲突了。

命令行:
lipo -info libexample.a

如提示fat file,代表这个包是支持多平台的,需要逐一解包然后重打包。

例如:Architectures in the fat file: libexample.a are: i386 armv7 armv7s x86_64 arm64

那么我们需要重复5次以下步骤。

解包、打包步骤:

  1. 创建临时文件夹,用于存放解压后的.o文件,如i386:mkdir i386
  2. 取出i386平台的包:lipo libexample.a -thin i386 -output i386/ libexample-i386.a
  3. 查看库中所包含的文件列表:cd i386 && ar -t libexample-i386.a
  4. 解压出 object file(.o后缀文件):ar xv libexample-i386.a
  5. 找到要删除的包(someframework.o)删掉:rm someframework.o
  6. 重新打包object file:cd .. && ar rcs libexample-i386.a i386/*.o,可再次输入[2-5]中的命令检验是否删除成功
  7. 将其他几个平台包逐一做上述[1-6]操作
  8. 重新合并为fat file的.a文件:lipo -create libexample-armv7.a libexample-armv7s.a libexample-i386.a -output libexample-new.a

原理

lipo是管理Fat File的工具, 可以查看cpu架构, 提取特定架构,整合和拆分库文件。

  • lipo -info xxxx.framework
    查看信息
  • lipo -create xxxx xxxx -output xxxx
    整合成Fat文件
  • lipo xxxx -thin cpu(armv7/arm64等) -output xxxx
    提取特定的cpu架构的thin文件
  • lipo -remove cpu(armv7/arm64等) xxxx -output xxxx
    移除掉特定的cpu架构的文件
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
2人点赞
更多精彩内容,就在简书APP
"小礼物走一走,来简书关注我"
还没有人赞赏,支持一下
RoaringMe学习和分享音视频相关技术知识,以及使用腾讯云音视频LiteAVSDK的经验记录~
总资产0共写了7143字获得8个赞共5个粉丝

推荐阅读更多精彩内容