原生licode只支持ubuntu,而自己經常使用centos因此想要在cent下編譯licode。寫篇博客記錄下遇到的問題。
期間也查看了搜索了各種帖子以及博客發現,大家在centos下編譯碰到的問題都不全一樣,想來也可以理解,licode版本,操作系統版本不一樣的話都可能導致不同的問題,下面是我的操作系統版本以及我遇到的問題(問題主要是erizo模塊) 。
LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.8.2003 (Core)
Release: 7.8.2003
Codename: Core
我編譯的時候 主要參考這位大佬的博客:licode學習之編譯篇–1
有重合的問題的話,我就沒有記錄,可以參考大佬的博客,我記錄下不一樣的問題。
還有編譯圖中學習到了一個方法,因爲很多源碼編譯下載源碼的時候都是再github上下載的,而訪問海外節點是真的慢,因此可以通過碼雲等其他國內的git網站將依賴的源碼先導入到國內,然後在下載,真的是速度飛快,非常提高效率。
首先我按照大佬說的將installUbuntuDeps.sh
中的apt-get都修改爲yum,因爲跑的過程中屏幕刷新的比較快,也沒有細看各種信息,導致後面編譯的時候各種報錯都是執行這個腳本的時候一些庫沒有安裝上,因此我建議如果要在centos下編譯licode,可以把多看下installUbuntuDeps.sh
的內容,把裏面需要安裝的東西都安裝到位了,再執行後面的腳本。(我自己跑installUbuntuDeps.sh
的時候因爲前期沒有記錄可能有遺漏,這一步還是非常重要的)。
執行installUbuntuDeps.sh
腳本的主要方向就是:把yum install 能安裝的直接安裝,不能安裝的就源碼安裝,因爲爲了產生其他問題,我這次編譯的時候是嚴格按照原生腳本中的版本去安裝各種依賴庫的,以後有機會再進行升級。
1.sudo yum install -qq python-software-properties -y
:
執行installUbuntuDeps.sh
的時候會碰到找不到這個,我查文檔貌似是說python-software-properties
的功能已經合併到software-properties-common
了,因此只需要將報錯的那行命令註釋掉就可以了,因爲下面一條命令就是sudo yum install -qq software-properties-common -y
,
2.原生licode是再ubuntu上升級的,gcc的版本是大於5的,我看大佬是通過修改腳本中的最低限制來編譯的,我自己當時還沒看大佬的博客不確定gcc4可以編譯成功嗎,因此我選擇了將我的centos上的gcc升級到了gcc5。
3.installErizo.sh
中的install_erizo
方法剛開始是使用conan來安裝boost和IncludePathsGenerator
的,執行conan install . --build IncludePathsGenerator
一直提示我的GCC版本的版本是4.8,我當時也很奇怪,我明明已經升級過gcc了,但是爲什麼還提示我的gcc版本不對,最後解決辦法是可以修改/root/.conan/profiles/default
將compiler.version=4.8
修改爲compiler.version=5
就可以了,licode/erizo/conanfile.txt
是執行conan install 時候需要依賴的文件,可以看到boost需要的版本是1.69.0
(boost是真的重,找機會可以用std替換下)。conan這塊基本上就沒有什麼問題了
4.問題最多的是執行./generateProject.sh
和buildProject.sh
這兩個腳本:
缺少libsrtp的報錯的那個宏是什麼我給忘了沒有記錄,不過都可以上網查到,而且之前如果對照installUbuntuDeps.sh
安裝好了libsrtp的話也不會又這個報錯,結合installUbuntuDeps.sh
和上網查,調整下編譯參數之類的裝上就行,
#installLibsrtp.sh
#!/usr/bin/env bash
SCRIPT=`pwd`/$0
FILENAME=`basename $SCRIPT`
PATHNAME=`dirname $SCRIPT`
ROOT=$PATHNAME/..
BUILD_DIR=$ROOT/build
LIB_DIR=$BUILD_DIR/libdeps
PREFIX_DIR=$LIB_DIR/build/
install_libsrtp(){
if [ -d $LIB_DIR ]; then
cd $LIB_DIR
cd libsrtp
CFLAGS="-fPIC" ./configure --enable-openssl --prefix=$PREFIX_DIR --with-openssl-dir=$PREFIX_DIR
make $FAST_MAKE -s V=0 && make uninstall && make && make install
cd $CURRENT_DIR
else
mkdir -p $LIB_DIR
install_libsrtp
fi
}
install_libsrtp
錯誤:lib not found: AVUTIL-NOTFOUND check README
安裝libav—>安裝libav(11.9)之前先安裝yasm 、opus 、 libvpx
(vp89的編解碼器都要安裝,並且要安裝在licode目錄下,要不Libav裝不成功
installLibav.sh
#!/usr/bin/env bash
SCRIPT=`pwd`/$0
FILENAME=`basename $SCRIPT`
PATHNAME=`dirname $SCRIPT`
ROOT=$PATHNAME/..
BUILD_DIR=$ROOT/build
LIB_DIR=$BUILD_DIR/libdeps
PREFIX_DIR=$LIB_DIR/build/
install_opus(){
[ -d $LIB_DIR ] || mkdir -p $LIB_DIR
cd $LIB_DIR
cd opus
./autogen.sh
./configure --prefix=$PREFIX_DIR
make $FAST_MAKE -s V=0
make install
cd $CURRENT_DIR
}
install_libvpx(){
if [ -d $LIB_DIR ]; then
cd $LIB_DIR
cd libvpx
CFLAGS=-fPIC ./configure --prefix=$PREFIX_DIR --enable-vp8-encoder --enable-vp8-decoder --enable-vp9-encoder --enable-vp9-decoder --enable-libyuv --enable-shared
make
make install
else
mkdir -p $LIB_DIR
install_libvpx
fi
}
install_libav(){
if [ -d $LIB_DIR ]; then
cd $LIB_DIR
cd libav
PKG_CONFIG_PATH=${PREFIX_DIR}/lib/pkgconfig CFLAGS="-Wno-error" ./configure --prefix=$PREFIX_DIR --enable-shared --enable-libvpx --enable-libopus --disable-doc
make $FAST_MAKE -s V=0
make install
else
echo "error"
fi
}
install_opus
install_libvpx
install_libav
錯誤:lib not found: LOG-NOTFOUND check README
解決辦法:Centos下安裝Log4cxx
錯誤:liav
的-Werror=attributes
(前面一長串的我給忘了,大概就是alloc_size
的錯誤),根本原因是編譯libav時候的這個alloc_size
有警告 應該從這裏把警告幹掉,但是我沒找到怎麼弄,我的解決辦法是將/data/licode/erizo/src/third_party/webrtc.cmake
下的Werror
刪掉不過這樣不安全.
還有就是安裝openssl libnice之類的大佬的博客都有我就沒寫了。
然後就是編譯速率提高,因爲我之前自己使用的時候就發現每次修改完C++部分的代碼執行installErizo,sh
的時候速度太慢了,雖然配有 -e等參數分開編譯,但是還是想再快一點,可以看到generateProject.sh
這個腳本里生成編譯選項的時候 有debug和release 可以把這個腳本修改下,用傳參的方法只生成release。