在Windows下编译WebRTC
前言
这篇文章的目的在于为你节省生命中宝贵的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
- 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脚本,写入:
- set PATH=[你的depot_tools路径,比如C:\depot_tools];%PATH%
- call gclient.bat config --name src http://webrtc.googlecode.com/svn/trunk
- call gclient.bat sync --force
- set GYP_GENERATORS=msvs
- 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编译的话,我也提供一个方便的脚本:
- @Echo Off
- :: hankcs
- title Hankcs's program
- CD\
- %~d0
- CD %~dp0
- set PATH=[你的depot_tools路径,比如C:\depot_tools];%PATH%
- del ninjia.log
- ninja -C out/Release >> ninjia.log
保存为bat,放到WebRTC\src目录下执行。
如果遇到了类似下面的错误:
- error c2220: warning treated as error - no 'object' file generated
- ...
- '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的更多相关文章
- [转] Windows下编译OpenSSL
简述 OpenSSL是一个开源的第三方库,它实现了SSL(Secure SocketLayer)和TLS(Transport Layer Security)协议,被广泛企业应用所采用.对于一般的开发人 ...
- Windows下编译objective-C
Windows下编译objective-C 2011-08-31 14:32 630人阅读 评论(0) 收藏 举报 windowscocoa工具objective clibraryxcode 目录 ...
- 在Windows下编译FFmpeg详细说明
MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNC工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时 MinGW,即 Minimalist GNU F ...
- 如何在WINDOWS下编译BOOST C++库 .
如何在WINDOWS下编译BOOST C++库 cheungmine 2008-6-25 写出来,怕自己以后忘记了,也为初学者参考.使用VC8.0和boost1.35.0. 1)下载boost ...
- 在Windows下编译OpenSSL(VS2005和VC6)
需要说明的是请一定安装openssl-0.9.8a . openssl-1.0.0我没有编译成功. 如何在Windows下编译OpenSSL (Vs2005使用Vc8的cl编译器)1.安装Activ ...
- windows下编译java源文件的编码错误
import java.util.Arrays;public class ArrayAsAReference{ public static void main(String[] args) { int ...
- Windows下编译SDL
Windows下编译SDL的理由我就不多说了,无论用VS来编译或调试SDL库都是很方便的.而且SDL源代码中也包含了VC工程,你所要做的只是解压VC工程,进行适当的配置,然后编译.调试. 编译SDL大 ...
- Windows下编译安装 FFmpeg
在Linux/Mac下编译 ffmpeg是非常方便的.但要在 Windows下编译 ffmpeg还真要花点时间.以下就是在 Windowns下编译ffmpeg的步骤: 一.安装Cygwin 在wind ...
- windows下编译php7图形库php_ui.dll
CSDN博客 具有图形化编程才有意思,这几天看到了php ui 图形扩展,只是现在只能下载php 7.1的 本次教程编译php7.2.6的 php ui 要是linux下编译起来比较简单 但是 win ...
随机推荐
- Unity3D C#事件管理:EventManager
原文地址:http://bbs.9ria.com/thread-153258-1-1.html 原project地址:https://github.com/djandrew/UnityEventMan ...
- PHP环境变量归纳(转自网络)
PHP环境变量主要有$GLOBALS[].$_SERVER[].$_GET[].$_POST[].$_COOKIE[].$_FILES[].$_ENV[].$_REQUEST[].$_SESSION[ ...
- PostgreSQL 里面的 BIGSERIAL
@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id; CREATE TABLE article( id BIGS ...
- db2数据库还原
1.建好数据库比如TEST,建的时候将codepage设为与目标备份的codepage一致,比如: 437 2.然后备份一下刚建好的数据库,备份成功后,将20141127目录删除,然后将原来备份好的 ...
- Spring之AOP由浅入深(转发:https://www.cnblogs.com/zhaozihan/p/5953063.html)
1.AOP的作用 在OOP中,正是这种分散在各处且与对象核心功能无关的代码(横切代码)的存在,使得模块复用难度增加.AOP则将封装好的对象剖开,找出其中对多个对象产生影响的公共行为,并将其封装为一个可 ...
- Centos下MySQL数据库主从双向同步配置
MYSQL支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护日志文件的一个索引以跟踪日志循环.当一个从服务器连接到主服务 ...
- Hive与Hbase关系整合
近期工作用到了Hive与Hbase的关系整合,虽然从网上参考了很多的资料,但是大多数讲的都不是很细,于是决定将这块知识点好好总结一下供大家分享,共同掌握! 本篇文章在具体介绍Hive与Hbase整合之 ...
- Oracle数据库体系结构(3)数据库进程
一.Oracle进程概述 在oracle中进程分为用户进程(User Process).服务器进程(server process)和后天进程3种. 1.用户进程:当用户连接到数据库执行一个应用程序是, ...
- c#命名规则参考
命名规则参考:1.从组件类型名中移去T前缀.例如TButton变成Button.2.除了第一个元音,删去所有元音字母.例如,Button变成bttn,Edit变成edt.3.压缩双字母.例如,bttn ...
- nodejs模块之fs&&stream
nodejs的文件系统fs模块,可以实现对文件.目录等的操作,stream模块实现对文件数据的断续读写操作 一.文件操作 fs.readFile(file[,options],callback) 异步 ...