在Windows系统下编译WebRTC


目录
  • 系统要求
  • 安装开发工具
  • 安装depot_tools
  • 拉取WebRTC代码
  • 编译代码
    • 生成工程
    • 编译
  • 代码更新
  • 引入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直接添加到最前面:

拉取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 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"

总结

  • 多亏网上的帖子帮助,才使得我顺顺利利的完成代码的编译,感谢前人为此付出的努力,点赞

    Windows平台WebRTC编译(持续更新)- 剑痴乎

    chromium编译官方文档

  • 代码拉取过程还是比较坎坷,遇到问题要及时去互联网上搜索。比较坑爹的是,gclient sync有时候会执行的卡住,命令行中一直重复提示在拉取third-party,后来自己感觉不对劲,在命令行窗口里按ctrl+c,重新执行gclient sync才继续拉取,对于第一次搞这个,不熟悉的人,感觉还是好坑呀!