我使用VS2015编译WebRTC经验总结

参考资料:

WebRTC下载编译七步走 - cabbage2008的专栏 - CSDN博客
https://blog.csdn.net/cabbage2008/article/details/52824254

编译最新版webrtc源码和编译好的整个项目10多个G【分享】 - 每一天都有新的希望 - CSDN博客
https://blog.csdn.net/yangzhenping/article/details/51276320

windows下webrtc的编译 2016 - 张晖的专栏 - CSDN博客
https://blog.csdn.net/nonmarking/article/details/46785197

环境准备(按照参考资料)
a. 系统locale最好设置成English,就是控制面板里面的Region  (解决编译时object 警告视为错误问题,我这里没有设置这个)
控制面板-> 时钟、语言和区域->更改位置->管理->更改系统区域设置 
选择英语美国 重启 
这里写图片描述 
这里写图片描述

b. 安装Visual Studio 2015 Update 3 版本。(要求vs 2015 update 2以上版本)

c. 配置depot_tools工具

计算机属性->高级系统设置->高级->环境变量->系统变量->打开Path,最前边增加 E:\depot_tools; 
4.查看是否成功 
在命令行中输出gclient ,查看是否配置成功 
这里写图片描述

 

编译调试

1.windows 生成VS项目文件 

cmd进入源码目录:
set DEPOT_TOOLS_WIN_TOOLCHAIN=0 
set GYP_GENERATORS=msvs-ninja,ninja 
set GYP_MSVS_VERSION=2015

gclient sync (我使用的是已经下载好源码的目录,不需要再执行这个去更新源代码)

python webrtc/build/gyp_webrtc.py

使用VS2015打开all.sln进行编译。

还有就是官方建议的命令: 
ninja -C out/Debug -> 编译Debug版

ninja -C out/Release -> 编译Release版

编译注意:我家里的电脑直接使用VS2015打开all.sln编译,经常提示MSBuild.exe已停止工作,无法正常编译完成。

我的解决办法是:先使用ninja -C out/Debug编译完成,然后在使用VS2015打开all.sln进行代码调试(进行少量代码修改使用VS编译没问题)。

 

其他可能遇到的问题:

以下的操作说明均基于上述工程,其他版本的流程基本相同。
1、webrtc工程只支持win7 64位或更新版本,不支持32位系统
2、安装python并将安装目录添加到环境变量中
3、安装windows SDK 8.1
4、安装Visual Studio 2013 Update 4 Community或Professtional版本,确保安装了MFC模块,不支持Visual Studio Express版本
5、安装DirectX SDK June 2010,安装完成后可能会报错,错误代码“s1023”,这是因为与系统已有的visual c++ redistributable packages版本冲突,不用管它,直接退出安装程序即可。这里我们需要的只是安装目录下的头文件和库。
6、安装WinDDK即驱动程序工具包,这里我们需要的主要是PATH\WinDDK\7600.16385.1\lib\ATL\amd64下的atlthunk.lib库
7、更改系统区域设置,在控制面板中找到区域和语言->管理->非Unicode程序的语言->英语
8、至此,所有的准备工作都已完成,可以打开工程目录下的all.sln进行编译了。


一般这时还会报如下错误:

1、警告被视为错误 - 没有生成“object”文件。

解决办法:改变项目的属性,把否警告被视为错误设为 “否(/WX-)”,有很多个工程需要设置

2、无法解析的外部符号 _intel_aes_encrypt_init_128,该符号在函数 _aes_InitContext 中被引用。

解决办法:把nss_static项目预处理器定义中的USE_HW_AES和INTEL_GCM去掉

3、error LNK2005: "class ATL::CAtlWinModule ATL::_AtlWinModule" (?_AtlWinModule@ATL@@3VCAtlWinModule@1@A) 已经在 libjingle_media.lib(win32devicemanager.obj) 中定义。

解决办法:在peerconnection_client项目的链接器->命令行中加入:/FORCE:MULTIPLE

4、error MSB3721: 命令“call python "..\..\tools\swarming_client\isolate.py" "check" "--result" "..\..\build\Debug\common_audio_unittests.isolated" "--isolate" "common_audio_unittests.isolate" "--path-variable" "DEPTH" "..\.." "--path-variable" "PRODUCT_DIR" "..\..\build\Debug\ " "--config-variable" "OS=win" "--config-variable" "chromeos=0" "--config-variable" "component=static_library" "--config-variable" "internal_gles2_conform_tests=0" "--config-variable" "icu_use_data_file_flag=1" "--config-variable" "use_openssl=0"”已退出,返回代码为 1。

解决办法:如前所述,在控制面板中找到区域和语音->管理->非Unicode程序的语言->英语

5、无法找到system_wrappers_default.lib文件,到src\build\Debug\lib 目录下。

解决办法:把编译出来的system_wrappers.lib复制一份并改名为 system_wrappers_default.lib

 

注意:工程中除了webrtc的核心代码外,还包含有大量的示例工程,所以若在直接全部编译时出现大量的重复错误,又不想一个一个地全部修正的话,可以找准需要的项目单独编译,单独修改。还有的时候,可能会在编译时发现很多工程都缺少同一个库,这样的话如果一个一个给这些工程添加这些库又很麻烦,可以右键工程-属性-配置属性-c/c++-附加包含目录或连接器-常规-附加库目录,webrtc中所有工程几乎都会有相同的附加包含目录,于是可以将缺失的库直接放入这样的附加包含目录中,再次编译时就会自动去这些目录下寻找相应文件了。


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值