webrtc 编译

注:webrtc 源码编译需要自备梯子.

获取源码

安装 depot_tools

depot_tools是个工具包,里面包含gclient、gcl、gn和ninja等工具。其中gclient是代码获取工具,它其实是利用了svn和Git.

//todo install
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
修改 ~/.zshrc
export PATH=$PATH:~/work/depot_tools/depot_tools

获取源码

创建源码目录 webrtc, fetch 执行之后将在 webrtc 目录中创建 src 目录, 而 src/webrtc 才是真正源码所在. 源码目录估计在 8G 左右大小.


mkdir webrtc && cd webrtc
linux : fetch --nohooks webrtc
android: fetch --nohooks webrtc_android
ios: fetch --nohooks webrtc_ios
gclient sync

切换分支代码

由于 master 分支更新度频繁, 不利于自身 patch 维护, 需要切换到指定版本分支.

cd src
gclient sync --with_branch_heads
git fetch
git checkout -b local_branch branch_heads/$branch
gclient sync

编译

区分为 linux 平台, android 平台, ios 平台.

linux

在 ubuntu 16.04 实现编译, 需要注意 webrtc 内部脚本仅支持 lts 发布版, 所以 Ubuntu15.04 这个估计有点麻烦了, 本文不讨论此情况.

gn gen out/Default
ninja -C out/Default

android

android 版本只支持在 linux 编译, 无法在 mac 环境中编译.

编译环境 jdk8 安装:

具体安装就不说了, 关键是环境变量设置, 楼主踩过这个坑, 环境变量未设置正确, 致各种 jni 相关的错误.


export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export GYP_DEFINES="OS=android"
export PATH=$PATH:${JAVA_HOME}/bin

android 编译

针对 armv7, armv8, x86, x64 都需要重新编译下


gn gen out/Default --args='target_os="android" target_cpu="arm64"'
ninja -C out/Default

ios

// todo install

切换到分支:

git checkout -b local_branch branch_heads/$branch

gclient sync

./tools_webrtc/ios/build_ios_libs.sh

出现报错:

../../third_party/usrsctp/usrsctplib/usrsctplib/netinet/sctp_input.c:1734:15: error: taking address of packed member 'time_entered' of class or structure 'sctp_state_cookie' may result in an unaligned pointer value [-Werror,-Waddress-of-packed-member]
                                                              &cookie->time_entered,
                                                               ^~~~~~~~~~~~~~~~~~~~
../../third_party/usrsctp/usrsctplib/usrsctplib/netinet/sctp_input.c:2486:10: error: taking address of packed member 'time_entered' of class or structure 'sctp_state_cookie' may result in an unaligned pointer value [-Werror,-Waddress-of-packed-member]

需要打个补丁,Pacth [https://codereview.chromium.org/2833833002]

cd build

patch -p2 -i /path/to/downloaded/issue2833833002_1.diff

此外需要根据不同 xcode 版本 如 8.3.3 则增加 xcode_version == "0833" 到 build/config/compiler/BUILD.gn 文件中( 搜索 xcode_version, 增加 || 条件 )

执行 ./tools_webrtc/ios/build_ios_libs.sh

提取 src/out_ios_libs/WebRTC.framework

你可能感兴趣的:(webrtc 编译)