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

2021-04-12  本文已影响0人  荆轲刺秦王_0275

因为公司项目需要,集成了腾讯的实时音视频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能否正常使用需要后续测试。

上一篇 下一篇

猜你喜欢

热点阅读