在Windows系统下编译WebRTC
系统要求
-
Win7及以上64位系统,推荐使用Win10,本文是在Win10上搭建的
-
内存至少8G
-
至少有20G的可用磁盘空间
安装开发工具
-
使用 Visual studio 2017 (>=15.7.2) 来编译代码,也可以使用Visual studio 2019(>=16.0.0),官方更推荐使用2019
-
从官网下载 Visual Studio Community 2017,本文使用 Visual studio Community 2017 来搭建编译环境:
-
Win+R 输入cmd,在命令行中,切换到下载的VS2017安装包文件所在的目录,执行如下的命令安装所需要的组件:
> VS_PATH_TO_INSTALLER.EXE --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Component.VC.ATLMFC --includeRecommended
在VS2017的安装界面,选择单个组件并过滤win,去除Windows 10 SDK (17763版本)勾选框,然后点击安装,网速比较好应该有个10~15分钟就可以安装完成:
-
安装完成后,先不要启动VS2017,去VS官网下载版本>=10.0.19041的Windows 10 SDK,点我下载 19041版本安装程序,并双击安装,编译WebRTC对Windows SDK的版本有最低的要求,这里必须勾选Debugging Tools for Windows:
安装depot_tools
- 下载depot_tools解压某个目录,我这里是D盘根目录,注意depot_tools所在目录路径不可以有空格,可能会导致拉取代码报错
- 添加depot_tools到系统环境变量,计算机 - 属性 - 高级系统设置 - 环境变量,注意depot_tools直接添加到最前面:
- 也可以在Cmd命令行中设置,执行如下命令,这样效果和上面是一致的,但这样影响最小:
set PATH=D:\depot_tools;%PATH%
拉取WebRTC代码
-
这时候需要准备一个FQ软件,使的系统可以FQ,后面拉工具和代码需要,如果有VPN,直接使用全局代理,若使用的是ss代理,通常是在命令行窗口中执行如下的命令:
set http_proxy=127.0.0.1:41091
set https_proxy=127.0.0.1:41091
-
然后执行gclient命令拉取相关的工具,过程的快慢和网速有关系,若工具拉取成功的话,执行gclient命令会显示如下截图的内容:
-
拉代码前,需要配置git
git config --global user.name "My Name"
git config --global user.email "my-name@chromium.org"
git config --global core.autocrlf false
git config --global core.filemode false
git config --global branch.autosetuprebase always
-
在命令行窗口中执行
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
命令,否则后面会拉取报错,该命令的含义是告诉使用VS来编译代码 -
在命令行窗口中,cd切换到预留20G磁盘空间的目录,执行如下命令,开始拉去WebRTC的代码,过程很漫长~ 需要耐心等待,可能需要下载10G的东西,包括源码、第三方库、测试代码,如果过程中失败,则在命令行工具中执行gclient sync,若感觉长时间重复输出一条命令,按ctrl+c可以停下来, 重新执行gclient sync 命令继续:
mkdir webrtc-src
cd webrtc-src
fetch --nohooks webrtc
gclient sync
过程截图:
出现这个错误,通常和网络有关系,和FQ软件不稳定有关系,失败了执行gclient sysnc继续重试:
出现这个错误,按照提示在命令行窗口中执行
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
命令后,在执行gclient sync继续:
代码拉取完成,nice~
编译代码
- 在命令行窗口执行如下的命令,设置一些环境变量:
set PATH=D:\depot_tools;%PATH%
set vs2017_install=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community
set GYP_MSVS_OVERRIDE_PATH=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community
set GYP_GENERATORS=msvs-ninja,ninja
set WINDOWSSDKDIR=C:\Program Files (x86)\Windows Kits\10
set GYP_MSVS_VERSION = 2017
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
生成工程
-
WebRTC使用Ninja来进行编译,Ninja对应的配置是通过gn来生成的。由于我们需要使用vs进行代码的调试,所以通过下面的命令生成Ninja的配置,并生成VS工程(Debug版本,工程文件位于
out\Default
目录下的all.sln):cd src
gn gen --ide=vs out/Default
生成成功:
-
如果需要Release编译,通过如下命令生成工程文件:
gn gen --ide=vs out/Default --args="is_debug=false"
-
可以使用
gn args out/Default --list
查看当前编译参数
编译
-
在src目录下,执行下面的命令进行代码的编译,最终二进制会生成到out\Default目录下:
ninja -C out/Default
开始编译:
编译成功:
代码更新
-
后续的代码更新,可以按照如下的步骤,需要切到src目录下执行,记得要开代理:
git checkout master
git pull origin master
gclient sync
引入WebRTC库
-
WebRTC编译后会在
src\out\Default\obj
目录下生成整个WebRTC工程的静态库:webrtc.lib,链接下这个就可以了如果VS应用没配置Clang编译器,链接这个webrtc.lib,生成工程文件时需要配置如下参数, 禁用clang与lld:
gn gen --ide=vs out/Default --args="is_clang=false use_lld=false"
总结
-
多亏网上的帖子帮助,才使得我顺顺利利的完成代码的编译,感谢前人为此付出的努力,点赞
-
代码拉取过程还是比较坎坷,遇到问题要及时去互联网上搜索。比较坑爹的是,gclient sync有时候会执行的卡住,命令行中一直重复提示在拉取third-party,后来自己感觉不对劲,在命令行窗口里按ctrl+c,重新执行gclient sync才继续拉取,对于第一次搞这个,不熟悉的人,感觉还是好坑呀!