因为公司项目需要,集成了腾讯的实时音视频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_64
和TXLiteAVSDK_ReplayKitExt_arm64
。
然后将这两个.a文件使用命令合并为一个
lipo -create TXLiteAVSDK_ReplayKitExt_x86_64 TXLiteAVSDK_ReplayKitExt_arm64 -output TXLiteAVSDK_ReplayKitExt
然后对腾讯提供的sdk进行替换,添加进工程,运行,不再报错,成功解决了问题。
TXLiteAVSDK_ReplayKitExt.framework能否正常使用需要后续测试。
网友评论