最近在做 Linux 平台下 webRTC 的二次开发, 一路摸索, 中间踩了不少坑, 这一篇博客先来简单介绍下 Linux 上如何使用 GCC 编译 webRTC.
为什么使用 GCC 编译?
这其实是无奈之举, Linux 下 webRTC 中的 ninja 工程使用的是 Clang 进行编译, 且依赖其内置的 stdc 标准库. 然而我现有的开发环境所使用的编译器为 GCC, 在使用 Clang 进行 webRTC 二次开发时遇到各种编译错误, 只好改用 GCC 重新编译 webRTC.
1. 获取 webRTC 源码
需要准备一个梯子, 同时使用工具进行终端穿墙.
获取源码流程可以查看官方文档 https://webrtc.org/native-code/development/
首先安装 Chromium depot tools;
Git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
将 depot tools 路径添加道环境变量中
export PATH=$PATH:/path/to/depot_tools
然后获取 webRTC 源码
- mkdir webrtc-checkout
- cd webrtc-checkout
- fetch --nohooks webrtc
- gclient sync
webrtc 源码下载下来很大, 确保翻墙工具有足够的流量
2. 修改 BUILD.gn
如果不修改 GN files 会出现一堆错误, 编译无法通过
关闭 - Werror 编译选项
build/config/complier/BUILD.gn
修改 treat_warnings_as_errors=false
使用系统 stdc 标准库
build/config/c++/BUILD.gn
注释掉
- cflags_cc += [
- "-nostdinc++"
- ]
- cflags += ["-fno-builtin-abs"]
- ldflags += ["-nodefaultlibs"]
- libs += [
- "c",
- "gcc_s",
- "m",
- "rt",
- ]
使用 gcc 编译命令为
- gn gen webrtc-checkout/src/out/Default --args="is_clang=false"
- ninja -C webrtc-checkout/src/out/Default
编译过程中可能会遇到因为源码问题导致编译出错, 修改即可
编译成功后, 即可使用 gcc 二次编译开发
注意编译时需添加一些编译选项
使用 cmake 构建工程时添加
- set(CMAKE_CXX_FLAGS "-fno-rtti")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWEBRTC_LINUX=1 -DWEBRTC_POSIX=1")
来源: https://www.cnblogs.com/luckydml/p/11828599.html