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

2019-09-05 22:08:06 浏览数 (1)

一、问题场景

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

二、解决方案

场景1

编译报dumplicate symbols错误。

解决办法

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

场景2

ffmpeg 和 ijk 相关冲突。

解决办法

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

场景3

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

解决办法

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

场景4

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

解决办法

这种情况发生在不能直接删除对应的三方库场景,那么可以删除这个三方库里面冲突的.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架构的文件)

0 人点赞