美文网首页
iOS-解决webrtc和百度语音库冲突的问题

iOS-解决webrtc和百度语音库冲突的问题

作者: 温柔vs先生 | 来源:发表于2019-10-11 14:16 被阅读0次
描述

最近项目中用到了百度语音唤醒和识别的相关功能,集成百度SDK后,发现我们项目中原来的音视频聊天功能不可用,现象就是接通以后2秒后卡死并闪退,最后定位到我们原来项目中的webrtc库和百度的SDK存在冲突(百度SDK中有用到webrtc的相关.o)。

查找问题阶段

找到两个冲突的.a后,就要搞清楚到底是哪里出现了冲突:
首先就要把两个.a解开,看看.a中到底存在什么:
网上有好多解决.a冲突的文章,大部分都是通过lipo 来解决

  • 查看.a里面的架构
lipo -info xxx.a
  • 创建文件夹由于到合并多个包,所以需要先分好类后,再进行此操作
mkdir armv7
  • 提取armv7,平台的包在第一步中,可以看到支持的各个平台。
lipo xxx.a -thin armv7 -output armv7/xxx-armv7.a
  • 解压.a文件,可以使用命令先进行查看.a包中的文件列表
ar -t armv7/xxx-armv7.a
  • 解压.a包(内部都是.o文件)
cd armv7
ar xv xxx-armv7.a
  • 第五步:删除冲突文件

针对minizip来说,我在个推包中,删除如下几个文件

rm zip.o
rm unzip.o
rm mztools.o
rm mztools.o
  • 第六步:重新打包

删除后,重新把.o文件,打成.a包。

cd ..
ar rcs libgt-armv7.a armv7/*.o
  • 第七步:根据支持平台类型,重复以上的操作,直到全部平台都操作一遍。

第八步:合并.a包,并替换文件,合并的新包,替换之前项目中的.a包

lipo -create xxx-armv7.a xxx-arm64.a xxx-i386.a xxx-x86_64.a -output yourself.a

以上是我解开.o采用的方法

虽然解开了,两个.o比对以后也找到了同名文件,删除其中一个后合成.a放到项目中,依然没有解决问题。

然后没办法只能根据xcode中的报错一步一步进行解决,报错中显示 image.png

如上,表明有大量符号缺失然后我就在新合成的.o中查找缺失的符号:

nm /Users/wbb/Desktop/arm64/libabd.a | grep vad_free

nm /Users/wbb/Desktop/arm64/libBDVoiceRecognitionClient-arm64.a | grep easr_engine

发现新合成的.a确实没有对应的符号。
同样的方法我在老的.a中却找到了对应的符号。最后通过多番查找发现合成或者解压.a后会出现符号丢失的现象。

最后的解决方案

采用命令行的方式删除(既不采用解压,删除后在合成的方式,直接用命令删除对应的.o),当然前提是在分离成arm64,armv7以后

ar -d /Users/wbb/Desktop/arm64/libBDVoiceRecognitionClient-arm64.a min_max_operations.o  

ar -d /Users/wbb/Desktop/arm64/libBDVoiceRecognitionClient-arm64.a real_fft.o 

期间用到的命令(待更新):

# 这里是将.a转成小文件,方便查找
nm /Users/wbb/Desktop/库文件冲突/libBDVoiceRecognitionClient-arm64.a > bdnew

# 查看该文件
vim bdnew 

# 斜杠 符号来全局查找
/ easr_engine

# 查看历史命令
history|grep ar

#man 命令
man ar

# 创建脚本
vim merge.sh 

# 查看脚本里面的命令
cat merge.sh 

# 执行脚本
sh  merge.sh 

# 创建实体armv7文件夹
mkdir armv7

#这个就是取value的前四位
value="group"
echo ${value:0:4}

相关文章

网友评论

      本文标题:iOS-解决webrtc和百度语音库冲突的问题

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