鉴于WebRTC更新速度较快且在编译过程中遇到了一些问题,故将此次编译过程在网上相关教程的基础之上进行了以下记录。
WebRTC版本:
环境要求
- Windows 10 64位系统
- Visual Studio 2019
Visual Studio修改
打开VS Installer,点击修改,勾选如下选项进行下载:
安装SDK调试工具
- 打开控制面板->程序与功能,找到刚才安装的最新Windows Software Development Kit,选择change。
- 勾选Debugging Tools For Windows,之后点击change。
depot_tools安装
depot_tools和webrtc的拉取默认使用者会科学工具)
-
创建好相关depot_tools目录,之后:
cd depot_tools git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
- 配置环境变量,将depot_tools目录添加到Path,并移动到最上面。
由于公司的网络环境,depot_tools和webrtc的拉取并不需要相关镜像。(先后反复尝试过声网和学而思网校的镜像后得出的结论……)
获取WebRTC源码
在创建好相关目录之后,进行如下操作:
cd webrtc
gclient config --name src https://chromium.googlesource.com/external/webrtc.git
fetch --nohooks webrtc
gclient sync
拉取和同步所需的时间较长。
编译
-
设置VS编译的环境变量
set GYP_MSVS_VERSION=2019 set GYP_MSVS_OVERRIDE_PATH=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional set GYP_GENERATORS=msvs-ninja,ninja
-
设置使用本机VS进行编译
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
-
生成VS工程文件
//进入webrtc/src文件夹 cd src gn gen --ide=vs out/Default
gn相关命令参数如下:
GN optionally generates files for IDE. Possibilities for <ide options> --ide=<ide_name> Generate files for an IDE. Currently supported values: "eclipse" - Eclipse CDT settings file. "vs" - Visual Studio project/solution files. (default Visual Studio version: 2017) "vs2013" - Visual Studio 2013 project/solution files. "vs2015" - Visual Studio 2015 project/solution files. "vs2017" - Visual Studio 2017 project/solution files. "vs2019" - Visual Studio 2019 project/solution files. "xcode" - Xcode workspace/solution files. "qtcreator" - QtCreator project files. "json" - JSON file containing target information --filters=<path_prefixes> Semicolon-separated list of label patterns used to limit the set of generated projects (see "gn help label_pattern"). Only matching targets and their dependencies will be included in the solution. Only used for Visual Studio, Xcode and JSON. --sln=<file_name> Override default sln file name ("all"). Solution file is written to the root build directory. --no-deps Don't include targets dependencies to the solution. Changes the way how --filters option works. Only directly matching targets are included. --winsdk=<sdk_version> Use the specified Windows 10 SDK version to generate project files. As an example, "10.0.15063.0" can be specified to use Creators Update SDK instead of the default one. --ninja-extra-args=<string> This string is passed without any quoting to the ninja invocation command-line. Can be used to configure ninja flags, like "-j".
如果需要清理工程:
gn clean out/Debug
-
编译
ninja -C out/Default
遇到问题
在生成VS工程文件时,产生了如下报错:
D:\webrtc\webrtc\src>gn gen --ide=vs2019 out/Default
Traceback (most recent call last):
File "D:/webrtc/webrtc/src/build/toolchain/win/setup_toolchain.py", line 315, in <module>
main()
File "D:/webrtc/webrtc/src/build/toolchain/win/setup_toolchain.py", line 273, in main
env = _LoadToolchainEnv(cpu, toolchain_root, win_sdk_path, target_store)
File "D:/webrtc/webrtc/src/build/toolchain/win/setup_toolchain.py", line 189, in _LoadToolchainEnv
return _ExtractImportantEnvironment(variables)
File "D:/webrtc/webrtc/src/build/toolchain/win/setup_toolchain.py", line 67, in _ExtractImportantEnvironment
raise Exception(
Exception: Path "C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared" from environment variable "include" does not exist. Make sure the necessary SDK is installed.
ERROR at //build/toolchain/win/toolchain.gni:493:24: Script returned non-zero exit code.
win_toolchain_data = exec_script("//build/toolchain/win/setup_toolchain.py",
^----------
Current dir: D:/webrtc/webrtc/src/out/Default/
Command: D:/webrtc/depot_tools/bootstrap-2@3_8_10_chromium_23_bin/python3/bin/python3.exe D:/webrtc/webrtc/src/build/toolchain/win/setup_toolchain.py "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional" "C:\Program Files (x86)\Windows Kits\10" "C:\Windows\System32;C:\Windows\SysWOW64;Arm64Unused" win x86 environment.x86
Returned 1.
See //build/toolchain/win/BUILD.gn:34:3: whence it was called.
win_toolchains("x86") {
^-----------------------
See //BUILD.gn:39:3: which caused the file to be included.
group("default") {
^------------------
这里尝试了很多方法,最后才看懂可能由于webrtc版本问题需要10.0.22621.0的SDK。而VS2019中可以提供的只到10.0.22000.0,去Windows官网下载10.0.22621.0又显示不支持WIN10专业版,故最后在VS2022的修改中获得了10.0.22621.0的SDK并安装其SDK调试工具,才解决了此问题。