前言

这篇文章的目的在于为你节省生命中宝贵的10小时(甚至更多),或者浪费你10分钟。作为Google更新频繁的大型跨平台基础库,WebRTC的编译一直被人称为噩梦。如果恰巧你偏要在Windows下编译WebRTC,那么你最好提前对自己的耐心做充分的评估。

截止目前,我尝试过中文博客社区里几乎所有的文章,可以说全部失效了。我不知道这篇文章的有效期有多久,因为webrtc.org社区的家伙们更新实在太勤奋了!

环境

OS:Microsoft Windows 7 Ultimate 6.1.7601 Service Pack 1 Build 7601

你只需要一台Win7 64机器即可,其他一概用WebRTC提供的就行。如果使用WebRTC自带的编译工具链的话,宿主机器已安装的Python和VS等等与WebRTC可以做到毫不相关,请不要被某些文章蒙蔽。

打开VPN

原因你懂的。推荐挑一个快点的TW或JP节点,保持网络通畅。

安装depot_tools

使用SVN checkout

  1. http://src.chromium.org/svn/trunk/tools/depot_tools

然后运行depot_tools\gclient.bat,这个脚本会触发检测逻辑,自动下载python276_bin和git-1.9.0.chromium.6_bin。

至此,我假设depot_tools已经安装完毕。如果没有,请关闭这个页面,然后自行Google。

检出WebRTC代码

建立一个文件夹,名叫WebRTC,然后新建一个bat脚本,写入:

  1. set PATH=[你的depot_tools路径,比如C:\depot_tools];%PATH%
  2. call gclient.bat config --name src http://webrtc.googlecode.com/svn/trunk
  3. call gclient.bat sync --force
  4. set GYP_GENERATORS=msvs
  5. call python src/webrtc/build/gyp_webrtc -G msvs_version=2013

保存,然后双击执行。接着是漫长的等待,10MB宽带的情况下我等了3个小时。期间控制台会一直显示still working on src,事实上,这时有几个G的东西等待下载。官网的说明够迷惑人的,这个脚本应该最大程度上简化了问题。

注意,脚本中最后一句的意思是生成VS的编译文件(.sln),这会触发gclient自动下载vs2013 express版的核心文件,所以不需要宿主机器上原先安装的VS。

脚本运行完毕后,src目录下应该出现了许多文件和目录,其中就有all.sln。

编译

下载DirectX开发包

DirectX SDK June 2010 http://www.microsoft.com/en-us/download/details.aspx?id=6812 ,解压备用。

使用VS2013编译(不推荐)

直接双击all.sln打开,为每一个子模块添加include:DXSDK\Include和library:DXSDK\Lib;depot_tools\win_toolchain\vs2013_files\wdk\lib\Atl\amd64 。

由于模块非常非常多,所以不推荐。

使用Ninja编译

Ninja是Chromium社区开发的一套build system,不要害怕陌生的Ninja,很快你就会爱上它,并且对VS心生厌倦。

编译前依然要搞定DirectX SDK,这次直接将DXSDK\Include复制到depot_tools\win_toolchain\vs2013_files\VC\include,DXSDK\Lib复制到depot_tools\win_toolchain\vs2013_files\VC\lib。这么做简单粗暴,方便高效。

使用Ninja编译的话,我也提供一个方便的脚本:

  1. @Echo Off
  2. :: hankcs
  3. title Hankcs's program
  4. CD\
  5. %~d0
  6. CD %~dp0
  7. set PATH=[你的depot_tools路径,比如C:\depot_tools];%PATH%
  8. del ninjia.log
  9. ninja -C out/Release >> ninjia.log

保存为bat,放到WebRTC\src目录下执行。

如果遇到了类似下面的错误:

  1. error c2220: warning treated as error - no 'object' file generated
  2. ...
  3. 'utf8' codec can't decode byte 0xd1 in position 0: invalid continuation byte

请在控制面板中修改语言为下图所示:

然后再次运行,你会发现error c2220神奇地消失了。

运行

一切顺利的话,WebRTC\src\out下会出现四个文件夹,如图所示

说明编译成功。

编译完了之后我想说,他娘的编译一下就这么麻烦,做这玩意得多难啊,人与人的差距真他娘大。

Reference

http://www.webrtc.org/reference/getting-started

http://egamesir.blog.163.com/blog/static/188096088201362411524585/

http://blog.csdn.net/choday/article/details/19978427

在Windows下编译WebRTC的更多相关文章

  1. [转] Windows下编译OpenSSL

    简述 OpenSSL是一个开源的第三方库,它实现了SSL(Secure SocketLayer)和TLS(Transport Layer Security)协议,被广泛企业应用所采用.对于一般的开发人 ...

  2. Windows下编译objective-C

    Windows下编译objective-C 2011-08-31 14:32 630人阅读 评论(0) 收藏 举报 windowscocoa工具objective clibraryxcode   目录 ...

  3. 在Windows下编译FFmpeg详细说明

    MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNC工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时 MinGW,即 Minimalist GNU F ...

  4. 如何在WINDOWS下编译BOOST C++库 .

    如何在WINDOWS下编译BOOST C++库 cheungmine 2008-6-25   写出来,怕自己以后忘记了,也为初学者参考.使用VC8.0和boost1.35.0.   1)下载boost ...

  5. 在Windows下编译OpenSSL(VS2005和VC6)

    需要说明的是请一定安装openssl-0.9.8a .  openssl-1.0.0我没有编译成功. 如何在Windows下编译OpenSSL (Vs2005使用Vc8的cl编译器)1.安装Activ ...

  6. windows下编译java源文件的编码错误

    import java.util.Arrays;public class ArrayAsAReference{ public static void main(String[] args) { int ...

  7. Windows下编译SDL

    Windows下编译SDL的理由我就不多说了,无论用VS来编译或调试SDL库都是很方便的.而且SDL源代码中也包含了VC工程,你所要做的只是解压VC工程,进行适当的配置,然后编译.调试. 编译SDL大 ...

  8. Windows下编译安装 FFmpeg

    在Linux/Mac下编译 ffmpeg是非常方便的.但要在 Windows下编译 ffmpeg还真要花点时间.以下就是在 Windowns下编译ffmpeg的步骤: 一.安装Cygwin 在wind ...

  9. windows下编译php7图形库php_ui.dll

    CSDN博客 具有图形化编程才有意思,这几天看到了php ui 图形扩展,只是现在只能下载php 7.1的 本次教程编译php7.2.6的 php ui 要是linux下编译起来比较简单 但是 win ...

随机推荐

  1. iOS 动画基础总结篇

    iOS 动画基础总结篇   动画的大体分类(个人总结可能有误) 分类.png UIView 动画 属性动画 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1 ...

  2. iOS 递归锁

    原理:递归锁也是通过 pthread_mutex_lock 函数来实现,在函数内部会判断锁的类型.NSRecursiveLock 与 NSLock 的区别在于内部封装的 pthread_mutex_t ...

  3. Laravel手记:执行route:cache时报LogicException

    laravel5的路由支持缓存.需要执行以下命令: php artisan route:cache 执行完毕后,报出以下错误: Route cache cleared! [LogicException ...

  4. 【BZOJ3270】博物馆 期望DP+高斯消元

    [BZOJ3270]博物馆 Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博物馆.这座博物馆有着特别的样式.它包含由m条走廊连接的n ...

  5. EasyNVR无插件直播服务器播放页面的集成----单独的播放器样式

    背景需求: EasyNVR自身拥有独立的客户端体系,安卓和IOS拥有各自独立的APP, 安卓下载地址:https://fir.im/EasyNVR: IOS下载可直接在APPstore搜索EasyNV ...

  6. centos7 PXE自动安装环境搭建

    原理: 要进行自动安装的主机A,加电启动时以网卡为第一启动设备 1.启动时会向网络广播,找到dhcp服务器B请求分配IP地址信息,服务器B除了给其分配基本的IP信息(ip.netmask.getewa ...

  7. nginx的location

    nginx的location分为普通location和正则location. 在普通location中,匹配规则是最大前缀匹配. 在正则location中,匹配规则是先到先得匹配.(最先匹配的正则lo ...

  8. iframe自动全屏

    <iframe src="weixin.php" id="adlistpage" name="adlistpage" framebor ...

  9. Bootstrap学习-导航条-分页导航

    1.导航条基础 导航条(navbar)和上一节介绍的导航(nav),就相差一个字,多了一个“条”字.其实在Bootstrap框架中他们还是明显的区别.在导航条(navbar)中有一个背景色.而且导航条 ...

  10. activiti--5 -----------------Activiti 工作流 流程各个步骤所涉及到的表

    ACT_RE_*: 'RE'表示repository. 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等). ACT_RU_*: 'RU'表示runtime. 这些运行时的表,包含流程实例 ...