WebRtc 研究筆記1 Arch linux 環境中下載, 編譯


開篇第一句,我覺得是最最重要的: 

注意: WebRtc 源碼的編譯基礎工作: X X!  一定要在命令行, 讓Git Svn 等命令訪問到google的服務器,否則會出現各種異常


參考:

https://groups.google.com/forum/#!forum/discuss-webrtc

等網站



我的環境是 ArchLinux X64,


翻牆的方法:
1.各種VPN
2.修改hosts
3.各種代理服務器
... 



使用到的軟件包
jdk 1.6 ( jdk1.7 無法編譯), svn, git


環境變量:
// /etc/profile


# java
export JAVA_HOME=/opt/jdk
export JRE_HOME=${JAVA_HOME}/jre
export PATH=$PATH:${JAVA_HOME}/bin:${JRE_HOME}/bin
export CLASSPATH=./:${JAVA_HOME}/lib:${JRE_HOME}/lib


# android 
export ANDROID_SDK_ROOT=/opt/android-sdk
export ANDROID_NDK_ROOT=/opt/android-ndk
export PATH=$PATH:${ANDROID_SDK_ROOT}:${ANDROID_SDK_ROOT}/tools:${ANDROID_SDK_ROOT}/platform-tools:${ANDROID_NDK_ROOT}


# ant 
export ANT_HOME=/opt/apache-ant
export PATH=$PATH:${ANT_HOME}/bin
export SVN_EDITOR=vim


export classpath=./:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar



//////



1 安裝 depot_tools(gclient)


$ cd /opt
$ mkdir depot_tools
$ cd depot_tools
$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

並將 depot_tools 加入 $PATH

export PATH=$PATH:/opt/depot_tools, 加到 /etc/profile 中, 省得每次都輸入



 下載代碼
    1.同步WebRTC代碼
        1.創建WebRTC目錄 
            mkdir WebRTC
            cd WebRTC


        2.初始化gclient
            gclient config https://webrtc.googlecode.com/svn/trunk

        3. 目標系統的配置

            echo "target_os = ['android', 'unix']" >> .gclient


        4. sync代碼, 出錯後,重複運行下面這一行,直到全部同步完成,.
            gclient sync --force 

同步過程中發現有錯誤,仔細查看,找出錯的地方,

我使用中是翻牆失敗,無法直接訪問服務器., 得出開篇第一段話.



        ( 煎熬的一步,裏面包括NDK、SDK等其他tools , 開始後,可以去 ... ... )  


        注意,若長時間出現  Still working on等信息,請不要中斷或者關閉,它依然在運行,如果你這裏中斷了,那麼之前下載的東西會全部刪除,然後又得重新sync一遍




3). 編譯代碼


    1.設置編譯環境


        1. cd trunk
        2. source ./build/android/envsetup.sh
        3.export GYP_DEFINES="$GYP_DEFINES OS=android"


    2. 下載編譯所依賴的包或工具,(這裏又會下載一大堆東西 如 Ant.)

  // ./build/install-build-deps.sh  (trunk目錄下,  這個在Ubuntu 下的編譯依賴包直接安裝.  Ubuntu 都成事實標準了)
// 其它的Linux 看一下這個文件裏的包,手動安裝吧.
// 我用的ArchLinux  大多數的包都已經安裝. 我少了ncurses包, pacman 手動安裝.



    3. gclient runhooks (生成ninja android的編譯文件.ninja files)


    4. 編譯 ( trunk目錄下 )


        編譯Debug版:  ninja -C out/Debug

開始我編譯出錯, 發現自己使用的jdk 1.7 ,改1.6 重新編譯  

ninja -C out/Debug -t clean 


        編譯Release版: ninja -C out/Release




基於以上步驟,如果網絡能正常訪問google服務的話,一般都不會出現其他的問題,如果真碰到了問題,不要怕,一般根據錯誤信息就可以知道相應的原因。細看出錯信息,一定能找出問題. 再不知道的google一下.


編譯成功之後 在 out/Debug 或者 out/Release目錄下看到相應的demo安裝包  如Debug目錄下,其中就有 AppRTCDemo-debug.apk 和 WebRTCDemo-debug.apk

這兩個包簽名一下,就可以安裝到Android 設備中了.


編譯後使用libjingle_peerconnection_so.so

debug下的libjingle_peerconnection_so.so 非常大76M,
android libs 中的只有4.xM
使用 arm-linux-androideabi-strip  Removes symbols and sections from files
移除無關信息方法:
$ANDROID_NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-strip -o libjingle_peerconnection_so.so  out/Debug/libjingle_peerconnection_so.so






AppRTCDemo程序的代碼就再 trunk/talk/examples/android/ 目錄下




注意,AppRTCDemo 與 WebRTCDemo的區別


WebRTCDemo只是局域網內的點對點,知道對方的ip就可以對打,  不需要服務器, 互設對方的ip 地址即可 startCall

 AppTRCDemo是需要服務器的,訪問google GAE的服務器.




我編譯中,還出現找不到 libtinfo.so.5


 error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory


即缺少libtinfo.so.5解決辦法  
解決方法:
安裝 ncurses包(ncurses-libs-5.6)


ln -s /usr/lib/libncurses.so.5 /lib/libtinfo.so.5  


安裝如下工具 ( sudo pacman -S ..) 

g++ (>= 4.2)

python (>= 2.4)

libnss3-dev >= 3.12

libasound2-dev

libpulse-dev

libjpeg62-dev

libxv-dev

libgtk2.0-dev

libexpat1-dev

For 32-bit builds on a 64-bit system:

lib32asound2-dev

ia32-libs


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章