webrtc-windows平台编译以及异常处理(3)

编译依赖环境说明

1、webrtc编译依赖的环境变量(以下设置的路径换为自己安装的路径即可)
cmd设置以下变量(不想每次都是手动输入,可以在添加到环境变量中)

set DEPOT_TOOLS_WIN_TOOLCHAIN=0

set GYP_MSVS_VERSON=2019

set vs2019_install=F:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise

set GYP_MSVS_OVERRIDE_PATH=F:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise

set WINDOWSSDKDIR=F:\Windows Kits\10

set GYP_GENERATORS=msvs-ninja,ninja

2、webrtc工程构建以及部分构建参数说明
gn构建编译工程指令举例

打开cmd,首先进入webrtc源码的src目录下,执行如下指令

gn gen out\release\x86 --ide=vs2019 --args="is_debug=false target_os=\"win\" target_cpu=\"x86\" is_component_build=false is_clang=false use_lld=false rtc_include_tests=false rtc_use_h264=true proprietary_codecs=true ffmpeg_branding=\"Chrome\" use_rtti=true use_custom_libcxx=false treat_warnings_as_errors=false use_ozone=true rtc_use_x11=false use_glib=false rtc_enable_libevent=false rtc_build_libevent=false rtc_build_tools=false rtc_use_pipewire=false rtc_build_ssl=false rtc_build_examples=false ffmpeg_use_unsafe_atomics=true  rtc_ssl_root=\"E:\jhcao\open_source\webrtc\src\third_party\"" 

编译程序:ninja -C out\release\x86

gn工程构建部分编译选项参数说明(有兴趣可以查看源码中的gn文件了解细节)
参数项说明
is_debugtrue-debug版本,false-release版本
target_os操作系统类型,win\linux\android\ios等
target_cpuwindows平台编译 32位x86, 64位x64
is_component_buildtrue是将最后一步本来很长的链接操作,改为链接成很多个分离的共享库的操作。它是默认的debug版的编译方式(除iOS编译),
并且大多数开发者使用这种模式用于每天的编译及调试。这种模式启动会很慢,
而且一些链接优化会被禁用,所以这不是测试的标准。有些人喜欢在release编译启用这种模式,来获取更快的链接速度和合理的运行性能。
is_clangfalses不使用clang编译器
rtc_use_h264是否使用H264,这里取true,注意Windows平台编码使用OpenH264,解码使用ffmpeg
rtc_build_sslfalse指定使用的openssl
rtc_ssl_root指定使用的openssl头文件的根路径(异常处理中有举例)
use_custom_libcxxWebRtc编译默认使用libc++来编译,而我们编译别的代码用的是libstdc++,这样在编译的过程中就会导致用到std::string的地方各种错误
3、webrtc编译过程中异常解决方案
1、【Exception: dbghelp.dll not found in “F:\Windows Kits\10\Debuggers\x64\dbghelp.dll”】
进入 控制面板→程序→程序和功能—>Windows Software Development Kit - Windows 10.0.19041

右击选择更改-->change,勾选Debugging Tools for Window  最后change确认即可
2、【使用自己编译的指定的openssl】
通过rtc_build_ssl=false参数可以控制编译时不使用boringssl,但是不能控制third_party中的文件使用boringssl,因为third_party中的BUILD.gn中没有rtc_build_ssl这个参数,需要手动修改webrtc-checkout\src\third_party\libsrtp\BUILD.gn中的文件。(目前发现只有这一个文件使用,其它暂时未用到boringssl)。
	以下是将openssl头文件放在 src\third_party目录下的配置示例
	gn gen 的编译选项中增加 rtc_build_ssl=false rtc_ssl_root=\"XXX\src\third_party\"(xxx是代码存放的绝对路径)

在这里插入图片描述

3、【默认编译webrtc生成的静态库,在vs2019中使用的时候,运行库为多线程调试MT/MTD,但是在需要包含其它库的时候,其它多数库运行库为多线程调试MD/MDD,vs中显示运行库的多进程调试方式如下,解决方案需要修改src\build\config\win\BUILD.gn文件,修改方案如下图】

在这里插入图片描述
在这里插入图片描述

4、webrtc\src\third_party\ffmpeg\libavcodec\utils.c(46): fatal error C1083: 无法打开包括文件: “stdatomic.h”: No such file or directory 】
gn gen 的编译选项中增加ffmpeg_use_unsafe_atomics=true

原因是对应的third_party\ffmpeg的BUILD.gn 中ffmpeg_use_unsafe_atomics是头文件包含的开关选项

在这里插入图片描述

5、【…/…/…/third_party/ffmpeg/libavcodec/pcm.c(52): error C2065: “CONFIG_PCM_VIDC_ENCODER”: 未声明的标识符
…/…/…/third_party/ffmpeg/libavcodec/pcm.c(633): error C2059: 语法错误:“字符串” …/…/…/third_party/ffmpeg/libavcodec/pcm.c(634): error C2059: 语法错误:“字符串” 】
注释报错所在行的内容即可(目前未发现使用上存在问题,后续遇到问题会调整)
6、【…/…/…/third_party/ffmpeg/libavcodec/vp3.c(2433): error C2065: “CONFIG_VP4_DECODER”: 未声明的标识符】
ffmpeg编译工具链生成的config.h中,window平台的没有CONFIG_VP4_DECODER,此处可以在vp3.c文件头自己申明一个 #define CONFIG_VP4_DECODER 0即可
7、【 fatal error C1002: 在第 2 遍中编译器的堆空间不足 】
继续执行ninja -C 编译指令,编译过程中可以查看下电脑的内存使用率,我的可用内存7.4G,编译的时候基本在7G左右浮动,所以容易出现编译提示内存不足而报错
8、【fatal error C1189: #error: "See: bugs.webrtc.org/9213#c13.】
注释报错文件中的报错相关的行(m94分支共计3个文件中存在)
//#if defined(WEBRTC_WIN) && !defined(__clang__)
//#error "See: bugs.webrtc.org/9213#c13."
//#endif

存在)
//#if defined(WEBRTC_WIN) && !defined(clang)
//#error “See: bugs.webrtc.org/9213#c13.”
//#endif


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

echo<£>

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值