最近在研究音视频通话方案,webrtc是一个相对比较完美的解决方案,服务器搭建使用Intel那套。而我们研究的是设备native端,需要从Google拉源码,交叉编译webrtc并移植,计划前期先在Ubuntu上跑通demo。
前期步骤参考github官方文档弄:https://github.com/open-webrtc-toolkit/owt-client-native
拉源码是个漫长的过程,建议弄个vpn或者国外租台服务器。
编译环境:阿里云Ubuntu16.04/虚拟机桌面版Ubuntu18.04
阿里云 gcc版本:
Ubuntu18.04 gcc版本:(为了跟阿里云环境保持相同,特地将Gcc 7.x降级为GCC5.x)
编译脚本参数:
python scripts/build_linux.py --arch x64 --gn_gen --docs --sdk --output_path /home/fangye/build/src/out --scheme debug --use_gcc
编译过程中遇到的问题:
1. gcc版本低于5.2,无法支持std=gnu++14
解决办法:升级gcc版本
https://blog.csdn.net/qingrenufo/article/details/78661513
2. 编译clang版本,不满足Google语法检测。
解决方法: 参考 https://blog.csdn.net/csdn_idiot/article/details/106358305
修改脚本,增加参数clang_use_chrome_plugins=false ,忽略代码风格检查即可。
编译过程中遇到的问题2:
../../third_party/webrtc/rtc_base/openssl_utility_unittest.cc:230:34: error: 'DTLSv1_2_client_method' is deprecated [-Werror,-Wdeprecated-declarations]
SSL_CTX* ssl_ctx = SSL_CTX_new(DTLSv1_2_client_method());
解决办法:
配置好正确的openssl版本跟和root路径,或者编译的时候直接不要指定--ssl_root就好了。
问题3:未找到isfinite定义
解决办法:在isfinite前增加std::
修改的文件有:third_party/webrtc/modules/audio_processing/echo_detector/mean_variance_estimator.cc
third_party/webrtc/modules/audio_processing/echo_detector/mean_variance_estimator.cc
问题四:编译报错
/usr/include/c++/5/ext/new_allocator.h:120:4: error: no matching function for call to ‘std::pair<webrtc::Module* const, std::unique_ptr<webrtc::ExternalTimeController::ProcessThreadWrapper::ModuleWrapper> >::pair(webrtc::Module*&, webrtc::ExternalTimeController::ProcessThreadWrapper::ModuleWrapper*)
解决办法:目前没找到好的解决办法,不过既然是test模块下的代码,那就不编译test模块就好了呀。
执行命令中不要加--test, 如下所示。
python build_linux.py --arch x64 --gn_gen --sdk --output_path /home/fangye/build/src/out --scheme release --use_gcc
问题五:都编完了报个这个错 IOError: [Errno 2] No such file or directory: 'out/release-x64/obj/talk/owt/libowt.a‘
解决办法:官方github上说要在script目录下执行, 而现在却提示没有文件或目录, 查看了下目录结构,这明显是要在src目录下执行才对呀。
以上是在阿里云ubuntu16.04服务器上编译遇到的问题,下面是在虚拟机Ubuntu18.04上遇到的问题,真的是恶心坏了。。
问题1:编译脚本无法正常执行 OSError: [Errno 2] No such file or directory
引起原因及解决办法:未配置depot_tools,将depot_tools下工具所在目录添加至PATH环境变量目录(路径记得换成你自己的 ):
export PATH="$PATH:/home/fangye/projects/owt_project/build/depot_tools"
为避免每次打开终端都要执行,建议将该命令加入~/.bashrc中。
问题2:ERROR at //build/config/linux/pkg_config.gni:103:17: Script returned non-zero exit code.
解决办法:安装pkg-config
sudo apt-get install pkg-config
问题3:提示pkg_config找不到glib-2.0.pc等文件
解决方法:
找一下这些文件在哪,把文件夹加到PKG_CONFIG_PATH
sudo find / -name glib-2.0.pc
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:<glib-2.0.pc文件所在绝对路径>
问题4:fatal error: alsa/asoundlib.h: No such file or directory
解决办法:安装asound相关依赖库
sudo apt-get install libasound2-dev
顺便把下面这两个也装一下吧,也可以先不用管了,遇到头文件找不到的问题再来这里找:
sudo apt-get install libpulse-dev
sudo apt-get install libx11-dev
sudo apt-get install x11proto-xext-dev
sudo apt-get install libxext-dev
sudo apt-get install libxfixes-dev
sudo apt-get install libxdamage-dev
问题5:fatal error: X11/extensions/Xrandr.h: No such file or directory
解决办法: 装酷...
sudo apt-get install libxrandr-dev
问题6:fatal error: X11/extensions/Xcomposite.h: No such file or directory
继续装...装不了的同学更新一下源,我用的阿里源。
sudo apt-get install libxcomposite-dev
如果有还有什么头文件找不到,参照这个套路弄吧,之前还想通过改编译脚本,简直要崩溃。
问题7:编完了报错
解决办法:要生成文档,就把doxgen装一下。
sudo apt-get install doxygen
至此,编译完成。
如上总结,可能还存在一些遗漏,遇到问题欢迎留言,一起探讨。