webrtc 编译速成 (2019年4月17日)

编译过多次,或多或少都会遇到相同问题,好记忆不如烂笔头,今天动手。。。

文章结构部分照抄别人的,根据自已的步骤稍做修改。

一准备工作

1.系统版本

 WIN10,64位

2.VS版本

Visual Studio 2017最新版本

3.Python

编译过程中需要,我用的2.7.9版本,需添加到Path环境变量。

https://www.python.org/ftp/python/2.7.9/python-2.7.9.amd64.msi

4.Microsoft DirectX SDK (June 2010)

如果安装出错,参考:安装DirectX SDK时出现Error Code:s1023 的解决方案

二.下载

参照官方文档 https://webrtc.org/native-code/development/

前期准备工作,少不了代理,配置环境变量

set DEPOT_TOOLS_UPDATE=0 #不更新depot_tools
set DEPOT_TOOLS_WIN_TOOLCHAIN=0 #编译时使用本机VS工具链
set GYP_MSVS_VERSION=2017 #指定VS版本
set GYP_MSVS_OVERRIDE_PATH=“C:\Program Files (x86)\Microsoft Visual Studio\2017\Community #vs安装路径,替换成自己的
set GYP_GENERATORS=msvs-ninja,ninja #使用ninja编译
set http_proxy=127.0.0.1:1080 
set https_proxy=127.0.0.1:1080

1.先安装depot_tools

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

下载完后

cd depot_tools

下载好了之后,需要先执行一次gclient命令,用于初始化工具集,这一步十分重要,如果执行不成功, 工具集将是不完整的,会导致后续步骤的失败

./gclient

2.下载webrtc

根据官方文档

mkdir webrtc-checkout
cd webrtc-checkout
fetch --nohooks webrtc
gclient sync

如果代理配置有问题,这其中会有报错

☆这一点很关键,如果gclient sync执行成功,下载的WebRTC的源码大概6G左右,但是此时的源码并不完整,还缺少一些工具和资源文件。比如会缺少下列工具和资源文件:

工具

gn.exe:位于webrtc-checkout\src\win,这就是为什么在生成VS解决方案工程的时候提示找不到gn.exe

clang-format.exe:位于webrtc-checkout\src\buildtools\win

isolate.exe:位于webrtc-checkout\src\tools\luci-go\win64

......

资源

位于webrtc-checkout\src\resources

......

这里工具比资源重要,有同学可能想到了去其他地方拷贝,但这是下策,因为上面列举工具和资源是我所知缺少的,至于是否还缺少其他的,我并不知道。

解决方法:执行gclient runhooks(执行一次HOOK操作),或者执行gclient sync --force(此命令会自动

                 执行一次HOOK操作)。此时会下载缺失的工具和资源文件。下载完成后,源码大小为11G左

                 右,这就是为什么要确保购买的VPS至少有20G流量

☆代码下载完成后在master分支上,如何切换到release分支,指南中有提到,指令如下:

cd webrtc-checkout\src
git branch -r #查看release分支

最新的release分支已经到m74了,然后切换到目标分支并打上标签。

git checkout -b my_branch refs/remotes/branch-heads/m74
gclient sync

☆如果遇到如下提示:NOTICE:You have PROXY values set in your environment,......BOTO_CONFIG......NO_AUTH_BOTO_CONFIG environment var.

解决方法:新建一个文件,http_proxy.boto,放在任意位置,我放到了D:\git\depot_tools中,文件内容如下:

[Boto]
proxy=127.0.0.1
proxy_port = 1080

系统环境变量配置:NO_AUTH_BOTO_CONFIG=D:\git\depot_tools\http_proxy.boto

3.编译webrtc

我个人是喜欢用vs工 程编译,so...

ps:默认编译出来是MT or MTD,如果需要编译MD or MDD,起飞=> 修改RuntimeLibrary类型

//下面一条指令生成VS2017的win32 debug工程
gn gen out/Debug --ide=vs2017 --args="is_debug=true target_cpu=\"x86\""
//下面一条指令生成VS2015的win32 release工程
gn gen out/Release --ide=vs2017 --args="is_debug=false target_cpu=\"x86\""
 
//以上方法均建议使用ninja方法编译,速度快
ninja -C out/Debug 
//或者
ninja -C out/Release

为了让自己编译出来的webrtc库能够被自己的vs工程使用关键是gn生成工程文件的地方。

webrtc默认的编译器是clang. 通过她编译出来的lib有时候我们的vs工程用不了会报如下错误:

webrtc.lib : fatal error LNK1136: invalid or corrupt file(只是举个例子)

所以在使用gn生成工程文件的时候需要带上  “is_clang=false ” 这样的参数。例如:

gn gen out/Debug --ide=vs2017 --args="is_debug=true target_cpu=\"x86\" is_clang=false"

去掉单元测试的命令

gn gen --ide=vs out/Debug --args="target_winuwp_version=\"8.1\" target_winuwp_family=\"desktop\" use_rtti=true is_clang=false libyuv_include_tests=false rtc_include_tests=false libyuv_include_tests=true rtc_use_h264=true"

4.编译后库文件太散,自动整理脚本

附上一个linux拷贝脚本:

注:  脚本应当在WebRTC的webrtc目录的上一级目录运行 这样才能对应头文件中的相对路径关系.

      Linux cp命令加上parents参数时,可以保持目录结构

      脚本放在src同级目录,会在当前目录生成 inc和lib两个文件夹

#!/bin/bash
echo $src

echo do temInc
src=`find src/ -name "*.h"`
mkdir temInc
for obj in $src
do
    #echo "cp header file $obj"
    cp --parents $obj temInc/
done
mv ./temInc/src ./inc
rm -rf temInc

echo do lib
mkdir lib

echo do lib Debug
cd lib
mkdir Debug
cd ..
src=`find src/out/Debug/ -name "*.lib"`

for obj in $src
do
    #echo "cp header file $obj"
    cp $obj lib/Debug/
done

echo do lib Release
cd lib
mkdir Release
cd ..
src=`find src/out/Release/ -name "*.lib*"`

for obj in $src
do
    #echo "cp header file $obj"
    cp $obj lib/Release/
done

一个简单的脚本即可以提取出头文件,这个方法同样适用于提取任意工程的指定类型文件.

5.windows合并N个lib文件为libwebrtc.lib一个文件

 打开vs developer command 控制台

cd lib/Debug
lib.exe /OUT:libwebrtc.lib *.lib

cd ..
cd lib/Release
lib.exe /OUT:libwebrtc.lib *.lib

6.为项目设置相关的宏

应用webrtc库需要的宏一般只有三个:NOMINMAX  WIN32_LEAN_AND_MEAN WEBRTC_WIN

7.其它问题相关链接

https://blog.csdn.net/qq_34732729/article/details/105707104

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值