为了编译webrtc,执行如下的gn命令生成out/WinDefault_debug没问题

gn gen out/WinDefault_debug --ide=vs2019 --args="target_cpu=\"x86\" rtc_include_tests=true target_os=\"win\" is_component_build=false is_clang=false use_lld=false treat_warnings_as_errors=false use_rtti=true rtc_build_examples=true enable_iterator_debugging=true"

(生成VS2019的工程;生成x86的可执行文件;rtc_include_tests表示生成测试用例;target_os表示生成平台是windows;is_component_build是false表示是静态库,true的话是动态库;不使用is_clang编译;不使用lld机制;不将警告视作错误;使用C++的运行时类型识别RTTI;生成示例)

我把文件生成到WinDefault_debug目录下,与linux上的编译做区分而已。


2022年4月24日补充

1、webrtc.lib编译出来是静态库,而且是静态链接C/C++运行库的。但是多数exe都是使用动态链接C/C++运行库的。所以找到src/build/config/win/BUILD.gn,找到里面的

#Desktop Windows: static CRT
configs = [":static_crt"]

改为

configs = [":dynamic_crt"]

2、最新的代码用VS2019去编,用VS2019去编,用VS2019去编!!!

3、编译出来的webrtc.lib在用的时候,出现链接错误

error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”

在gn命令的--args里增加enable_iterator_debugging=true

4、is_component_build选项对webrtc无法设置为true,也就是webrtc无法编译成dll。如果设置了true执行gn就会报错。本来is_component_build同时还控制链接动态还是静态的crt,不能设置成true就只能按1的方法手改了


但是运行ninja构建的时候遇到了两个问题:

我已经设置了环境变量:

set vs2017_install=F:\Microsoft Visual Studio\2017\Enterprise
set GYP_MSVS_OVERRIDE_PATH=F:\Microsoft Visual Studio\2017\Enterprise
set GYP_GENERATORS=msvs-ninja,ninja
set WINDOWSSDKDIR=F:\Windows Kits\10
set GYP_MSVS_VERSION = 2017
set DEPOT_TOOLS_WIN_TOOLCHAIN=0

这里特别注意我的Visual Studio不是装在默认的C盘!!!

问题1)提示缺少头文件,链接找不到mt.exe和rc.exe

例如:

fatal error C1083: 无法打开包括文件: “winapifamily.h”: No such file or directory

fatal error C1083: 无法打开包括文件: “winsock2.h”: No such file or directory

有文章说ninja -t msvc -e environment.x86提供的环境变量INCLUDE缺少了一些路径,environment.x86是一个文件。可是我怎么也找不到environment.x86(我确实是编译32位的库,在gn的--args里加了target_cpu="x86"选项)这个文件

原来是我的VS安装路径不同,正常情况下执行ninja会生成environment.x86文件的。要解决这个问题,在webrtc的源码目录找到这个文件:src/build/vs_toolchain.py,里面识别VS的安装路径是写死的C盘,所以修改一下

灰色的部分原本是没有的,加进去。注意逗号、字符串单引号(会python的话改这个就是小意思,不会的话就按照我这里注意事项改就行了)。路径写自己的VS安装的真实路径,我是企业版,目录最后一级是Enterprise,如果是社区版或者预览版参照前面的几行代码写到Community、Preview目录一级。然后保存重新运行ninja -C。

如果上面的路径写对了,这时候在out/WinDefault_debug(多数人都是out/Default目录,反正你自己执行gn的时候写的输出目录是什么就是什么)就会有environment.x86生成。

记事本打开environment.x86文件,找到INCLUDE=这一段,把缺少的头文件路径加上去即可。

问题2)ninja: build stopped: subcommand failed.

看上去没有任何信息,就直接说失败。其实不是的,因为ninja默认并发编译,所以错误详细信息前面输出了,然后被另一个进程的输出刷过去了,再显示的失败。运行ninja的时候加上-j 1,变成单进程运行,就能看到错误消息是什么了,处理完了之后再把-j 1去掉。


2022年4月24日补充

问题3) -Wno-shadow选项报无法识别的数值参数

搜索所有build.gn,然后在里面寻找-Wno-shadow,加上if(!is_win)限制,让windows平台不加这个选项就好了。不是每个build.gn都有的,也就10个左右,都改一下就行。

这是我修改的其中一个,加上if判断不是Windows才加,Windows就不加就能避免了。注意看看前后有没有一样的层级的if,他们的缩进是用空格还是tab、用多少个,就跟着照样。我没有学习过gn脚本的语法,但是不排除跟makefile一样缩进对脚本也是有语法意义的,所以最好跟着前后的缩进等级和缩进方法。

depot_tools在windows上用遇到的问题和RTC编译出错相关推荐

  1. Windows 上如何通过 Gitee 搭建 ESP8266_RTOS_SDK 的编译环境

    需要安装的软件: Git Bash Python 环境,ESP8266 Master 需要安装 Python v3 版本的环境,安装的时候,记得勾选 "add to PATH" 打 ...

  2. 最新版本webrtc源代码在windows上的编译方法

    http://blog.csdn.net/choday/article/details/19978427 分类: webrtc 2014-02-26 14:34 1893人阅读 评论(8) 收藏 举报 ...

  3. 电脑显示没有被指定在上运行_win10系统运行程序提示“dll没有被指定在windows上运行”的办法...

    有关win10系统运行程序提示"dll没有被指定在windows上运行"的操作方法想必大家有所耳闻.但是能够对win10系统运行程序提示"dll没有被指定在windows ...

  4. Jenkins简介及在Windows上的简单使用示例

    Jenkins是一款开源CI(Continuous Integration,持续集成)&CD(Continuous Delivery,持续交付)软件,用于自动化各种任务,包括构建.测试和部署软 ...

  5. FFmpeg在Windows上设置dshow mjpeg编码+libyuv解码显示测试代码

    之前在https://blog.csdn.net/fengbingchun/article/details/103444891中介绍过在Windows上通过ffmpeg dshow设置为mjpeg编解 ...

  6. FFmpeg在Windows上通过dshow编解码方式设置为mjpeg并实时显示测试代码

    Windows上默认的内置摄像头一般支持两种编解码格式:rawvideo和mjpeg.在调用FFmpeg接口时默认的采用rawvideo.这里通过DirectShow实现为mjpeg进行编解码. 通过 ...

  7. OpenCV代码提取:Windows上通过DShow获取Camera视频

    在OpenCV 3.1中获取视频的模块在videoio(video input and output module)中,调用VideoCapture类接口,除了videoio模块外还依赖core.hi ...

  8. pip、NumPy、Matplotlib在Windows上的安装过程

    Windows上Python 3.6.2 64位的安装步骤: 1. 从  https://www.python.org/downloads/windows/ 下载Windows x86-64 exec ...

  9. linux 类似winscp_mac如何连接远程linux,类似windows上的putty和winscp

    windows上有putty可以通过ssh协议连接远程linux系统. mac上也可以用终端连接,转自:http://www.unixnewbie.org/putty-equivalent-for-m ...

最新文章

  1. 怎样在表格中选出同一类_超超超超实用的年会策划执行表格模板合集!
  2. ipad编程软件python-iPad可用的软件编程软件有吗?
  3. Redis进阶-Redis对于过期键的三种清除策略
  4. 一款让你“乐词不疲”的背单词神器
  5. linux sed 写文件,使用sed对文件进行操作
  6. 使用JaCoCo Maven插件为单元和集成测试创建代码覆盖率报告
  7. HYSBZ - 1101——莫比乌斯反演
  8. 实例46:python
  9. jquery 中多条件选择器,相对选择器,层次选择器的区别
  10. H3C Hybrid实验
  11. 使用虚拟机win7安装_STEP7 V5.6
  12. AB PLC学习笔记
  13. Windows及Linux系统下--adb驱动安装及问题总结
  14. HTML5期末大作业:旅游网站设计——桂林旅游(3页) HTML+CSS+JavaScrip
  15. 文档类型字符集即HTML标签的语义化
  16. 基于Stacey模型的变革小招式:强有力的提议
  17. rasp 系统_浅谈RASP技术攻防之基础篇
  18. 运营实战:5个步骤分析目标人群画像流程图
  19. 电脑重装Win10如何选择32位和64位的系统
  20. Vue+SpringBoot图书管理系统前后端分离(教你一步一步搭建)

热门文章

  1. 网络编程基础知识02
  2. 记一次阿里云ECS被挂挖矿代码的处理历程
  3. springboot订单超时和超时提醒
  4. keras的简单介绍
  5. 全面剖析页游巨头发家史(转)
  6. git(9)Git 内部原理
  7. 高光谱图像分类_高光谱图像分析-分类
  8. 软件:RAiSD 快速检索硬清扫区间
  9. c语言 指针(1) 指向数组的指针
  10. ieee 754四字节转浮点数c语言实现,IEEE-754标准浮点数,十六进制与十进制转换方法(附C代码)...