最近在研究音視頻通話方案,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
至此,編譯完成,

如上總結,可能還存在一些遺漏,遇到問題歡迎留言,一起探討,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/177526.html
標籤:其他
上一篇:【技術教程】如何通過Java程式呼叫RTSP拉流協議視頻平臺EasyNVR程式介面?
下一篇:音頻信號處理基礎知識
