ubuntu 18.04 Build WebRTC

在Linux环境下编译WebRTC时遇到了一些挑战,如下载速度慢、分支切换复杂以及编译器兼容性问题。文章指出,必须使用g++-8来编译,其他版本可能导致失败。此外,编译静态库时需禁用某些特性,如使用系统自带的libcxx,以避免兼容性问题。编译时还应关闭警告作为错误的选项,以防止编译失败。
摘要由CSDN通过智能技术生成

背景

时隔两年多,现在又要搞 webrtc 了,翻出了原来写的文档按照流程操作,发现已经不能正常进行下去了,折腾了一番以后,重新记录下 Linux 下编译 webrtc 遇到的一些坑。

源码下载

webrtc 官方文档:Development | WebRTC

关于源码的下载大家都知道,现在下载越来越难搞。

分支切换

chrome 的分支管理跟我们的方式不一样,比如最近发布的 stable 100 对应的 M100 tag,如果要切换到这个稳定分支,还是需要找到其对应的 commit ID 的,可以从以下这个网址找到每个版本的分支和tag 的对应关系:

https://chromiumdash.appspot.com/branches

example

编译

主要的问题还是编译,如果按照官方文档一步步操作,只要下载成功,基本不会失败,但是在 Linux 下 webrtc 默认使用 clang 进行代码的检查和编译,虽然官方提供了切换 g++ 的命令参数,但是其也明确说了,仅仅是个切换 g++ 的命令参数而已,不保证没有问题看。

由于别人引用webrtc 的工程均使用 g++,同时为了避免引用动态库带来的性能回退,决定还是编译链接 webrtc 静态库,那么便不得不用 g++ 编译webrtc static library。

直接说结论:

Linux 下编译必须使用 g++-8 的版本,g++-7 和 g++-9 都不行,每个版本对代码的检查标准不一样,当然也可以通过修改源码适配编译器版本解决,但是代码量巨大,不确定需要修改多少;

同时使用 g++-8 编译的不能编译其测试程序,测试程序中语法补严谨,有很多warning as error,当然如果需要也可以一一解决。

本人此时的环境和版本分别是:

  • Ubuntu 18.04
  • g++-8.x
  • webrtc: M100
mkdir -p /home/gobert/opensource/webrtc

cd /home/gobert/opensource/webrtc

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

export PATH=$PWD/depot_tools:$PATH

fetch --nohooks webrtc

# 切换到 M100 版本

git checkout branch-heads/4896

gclient sync

bash build/install-build-deps.sh

#如果提示该错误

apt install pkg-config

gn gen out/Debug --args='is_debug=true target_os="linux" target_cpu="x64" is_component_build=false use_sysroot=false is_clang=false use_lld=false treat_warnings_as_errors=false rtc_include_tests=false rtc_build_examples=false use_custom_libcxx=false use_rtti=true'

ninja -C out/Debug

# 编译 release 版

gn gen out/Release gn gen out/Release --args='target_os="linux" target_cpu="x64" is_debug=false is_component_build=false use_sysroot=false is_clang=false use_lld=false treat_warnings_as_errors=false rtc_include_tests=false rtc_build_examples=false use_custom_libcxx=false use_rtti=true'

ninja -C out/Release

几个有用的参数介绍:

is_debug 用于控制是否编译 debug 版本,如果 debug 版本还需要 link asan 的话,需要在 is_debug 为 true 的前提下,加上 is_asan=true;

is_clang=false 就是用来控制禁止 clang,使用 g++ 的;

treat_warnings_as_errors=false 使用 g++ 避免 warn as error 导致编译报错;

use_custom_libcxx=false 禁用webrtc 内部自定义的 libcxx,因为我这里是要编译静态库,如果使用其内部的 libcxx,外部使用系统自带的 libcxx,结果你想?

use_rtti=true 配置全局 rtti 统一为 true;

如果想要生成 compile_comands.json 用来配置 IDE 方便索引代码的话,就加上 –export-compile-commands 参数,注意该命令不在 –args 中,同时该参数仅支持 clang 编译器。

GitHub 分享

一个不错的下载部署环境的方案,一直都在更新:

GitHub - shiguredo-webrtc-build/webrtc-build: 様々な環境向けの WebRTC のビルドを行って、そのバイナリを提供しています

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值