美文网首页
集成腾讯sdk导致的静态库冲突问题解决办法

集成腾讯sdk导致的静态库冲突问题解决办法

作者: 荆轲刺秦王_0275 | 来源:发表于2021-04-12 14:46 被阅读0次

因为公司项目需要,集成了腾讯的实时音视频sdk,命令为

pod 'TXLiteAVSDK_Professional', :podspec => 'http://pod-1252463788.cosgz.myqcloud.com/liteavsdkspec/TXLiteAVSDK_Professional.podspec'

同时因为另一个功能,需要单独引入一个sdk,名为TXLiteAVSDK_ReplayKitExt.framework。
引入以后TXLiteAVSDK_Professional包含的TXLiteAVSDK_Professional.framework与TXLiteAVSDK_ReplayKitExt.framework发生了冲突,导致项目无法运行,原因是两个sdk都包含了相同的.o文件。为了能保证项目正常运行和开发,所以决定将TXLiteAVSDK_ReplayKitExt.framework中包含的重复文件删除,然后重新打包成静态库,看一下问题能不能解决。

通过论坛,找到了静态库拆分与合并的命令,正式进行操作。
首先使用的命令是

ar -t TXLiteAVSDK_ReplayKitExt

但是这时候终端提示

ar: TXLiteAVSDK_ReplayKitExt is a fat file (use libtool(1) or lipo(1) and ar(1) on it)

这是因为TXLiteAVSDK_ReplayKitExt包含了多个CPU架构,导致该命令无效,这时候我们可以使用命令

lipo -info TXLiteAVSDK_ReplayKitExt

查看TXLiteAVSDK_ReplayKitExt包含的架构,结果为

Architectures in the fat file: TXLiteAVSDK_ReplayKitExt are: x86_64 arm64

也就是包含x86_64和arm64两种CPU架构,我们需要先将每一个架构拆分出来,拆分成对应的静态库,命令为

lipo TXLiteAVSDK_ReplayKitExt -thin x86_64 -output TXLiteAVSDK_ReplayKitExt_x86_64

这个命令的意思是将TXLiteAVSDK_ReplayKitExt中的x86_64架构拆分为文件名为TXLiteAVSDK_ReplayKitExt_x86_64的静态库,结果如图:


Xnip2021-04-12_14-31-48.jpg

这时候使用命令

ar -t TXLiteAVSDK_ReplayKitExt_x86_64

就可以看到该静态库包含的.o文件

__.SYMDEF
TXCReplayKitExtVideoEncoder.o
TXReplayKitExt.o
TXCDarwinNotificationCenter.o
TXC264TunnelClient.o
TXCAsyncSocket.o
TXLiteAVSDK_ReplayKitExt_vers.o

其中

TXCAsyncSocket.o
TXCDarwinNotificationCenter.o

为冲突文件。

然后使用命令

ar xv TXLiteAVSDK_ReplayKitExt_x86_64

将TXLiteAVSDK_ReplayKitExt_x86_64解压,得到其包含的.o文件。

手动删除冲突的两个.o文件。
然后将剩余的.o文件重新打包为静态库,命令为

ar rcs TXLiteAVSDK_ReplayKitExt_x86_64 *.o

需要注意的是,这里使用*.o是目前已经处于.o文件所在的文件夹,如果不是,则需要注明路径,比如sdk/*.o

然后按照以上方法,对arm64架构也进行处理,最后得到处理完成后的文件TXLiteAVSDK_ReplayKitExt_x86_64TXLiteAVSDK_ReplayKitExt_arm64

然后将这两个.a文件使用命令合并为一个

lipo -create TXLiteAVSDK_ReplayKitExt_x86_64 TXLiteAVSDK_ReplayKitExt_arm64 -output TXLiteAVSDK_ReplayKitExt

然后对腾讯提供的sdk进行替换,添加进工程,运行,不再报错,成功解决了问题。

TXLiteAVSDK_ReplayKitExt.framework能否正常使用需要后续测试。

相关文章

  • 集成腾讯sdk导致的静态库冲突问题解决办法

    因为公司项目需要,集成了腾讯的实时音视频sdk,命令为 同时因为另一个功能,需要单独引入一个sdk,名为TXLit...

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

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

  • ijkplayer修改库名

    因为集成腾讯的sdk,发现库冲突了; 本打算只用腾讯的那三个库,发现腾讯的ijkplayer做了一件比较那啥的事情...

  • 16-环信(1)

    0924 1. 集成SDK注意要点(10.集成环信sdk) 按文档导入依赖库的时候对拖入的环信.a静态库只能保留一...

  • 解决静态库冲突问题

    问题 集成项目SDK的时候用到公司的两个静态库,在没有添加other link flags -ObjC之前,编译运...

  • Android 11 绕过反射限制

    1. 问题出现的背景 腾讯视频在集成我们 replay sdk 的时候发现这么个错误,导致整个 db mock 功...

  • 静态库冲突 & Git (20)

    静态库冲突 & Git (20) 静态库冲突 冲突本质 -Objc 以及 -all_load 都没有问题, 都可以...

  • 静态库制作之依赖库

    开始制作静态库(SDK)的时候一直有一个疑问,如果我的静态库要集成其他SDK怎么办,就像友盟分享,你除了添加友盟的...

  • private_external_symbol VS exter

    腾讯提供的iOS SDK ——TencentOpenApi 是静态库,然后因为业务需求,需要把它转换为动态库(取名...

  • 在集成SDK时遇到的问题

    有时我们在集成别人的SDK时,会遇到找不到某个分类文件中某个方法的问题,这时我们可能会怀疑是不是SDK静态库中是否...

网友评论

      本文标题:集成腾讯sdk导致的静态库冲突问题解决办法

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