美文网首页
iOS端 TXLiteAVSDK 与其它三方库冲突报错问题

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

作者: RoaringMe | 来源:发表于2019-06-16 11:14 被阅读0次

    问题场景

    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架构的文件

    相关文章

      网友评论

          本文标题:iOS端 TXLiteAVSDK 与其它三方库冲突报错问题

          本文链接:https://www.haomeiwen.com/subject/kjgwfctx.html