Windos平台,官方编译LibYuv详细教程-Ninja编译

Windos平台,官方编译LibYuv详细教程-Ninja编译

  • 前言(阅读可有效节约您的时间)
    • 编译教程

前言(阅读可有效节约您的时间)

首先说一下结论,为什么要用ninja编译Libyuv。 下面是官方的编译教程:
https://github.com/lemenkov/libyuv/blob/master/docs/getting_started.md
在windows上比较方便的方式是使用CMake构建VS的工程进行编译。但是如果编译64位版本,由于Visual Studio不支持64位内联,导致无法启用SIMD指令集,转码效率大幅下降
所以本文主要介绍x64加入指令集优化的libyuv的编译方式。如果想要x86的,可以直接用CMake构建vs工程编译。
不想看下面内容的可以直接下载编译好的libyuv x64的静态库。在win10,vs2017上测试可以使用。

下载地址:https://download.csdn.net/download/fengchu3415/10834505

CSDN默认最少一个资源分。再贴一个百度网盘的地址:

下载地址: https://pan.baidu.com/s/1076TaWhm_VoR89OXV_91cQ 提取码: 32km

编译教程

环境:win10+vs2017

编译流程其实很简单。难的是Libyuv的仓库在墙外。。。科学上网需要自行解决下。这里推荐使用SS+proxifier,用ss的全局代理模式,貌似CMD没有能走代理。proxifier可以实现CMD的代理访问。

参考 https://www.echoteen.com/proxifier-newway.html

详细的编译流程参考 https://github.com/lemenkov/libyuv/blob/master/docs/getting_started.md

这里说一下重要的步骤

  1. 安装depot_tools

参考 http://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up

windows下直接从这里下载https://storage.googleapis.com/chrome-infra/depot_tools.zip
然后解压到例如: D:\depot_tools,同时将D:\depot_tools加入环境变量Path中
新建一个系统变量DEPOT_TOOLS_WIN_TOOLCHAIN:
Windos平台,官方编译LibYuv详细教程-Ninja编译_第1张图片
这个环境变量的目的主要是后面执行 gclient runhooks的时候 可以通过代理将我们需要用到的编译过去下载下来。(这是网上说的方法,实际我并没有成功,我的下载方法后文会说。。)

  1. gclient安装必要工具
    cmd进入D:\depot_tools, 运行gclient (不加任何参数)两次,从这里开始就需要科学上网了,第一次运行gclient会帮你安装一些win平台上需要的一些工具,例如msysgit和python等。这里从proxifier可以看到在下载,但是cmd里没有任何反应。需要等待一会。
    第二次运行,成功的话如下图:
    Windos平台,官方编译LibYuv详细教程-Ninja编译_第2张图片

  2. 获取libyuv源码
    新建一个工作目录例如:D:\depot_tools。在此目录中执行

gclient config --name src https://chromium.googlesource.com/libyuv/libyuv
gclient sync

这里就是从谷歌的仓库拉取libyuv的源码。同时附加了大量的其他库的源码,整个下载下来大概是6G多(这里我试过直接从github获取libyuv的源码,但是并不能用于ninja编译。所以还是老老实实的下载吧)
这里执行到最后的时候可以看到在运行

gclient runhooks

这个命令主要是用来根据当前平台下载一些必要的编译工具。这一步很容易下载不下来。网上解决的方法也是各种各样。比如上文说的添加系统变量DEPOT_TOOLS_WIN_TOOLCHAIN。但是我是没有能解决这个问题。 这里说下我的方法。(建议找一个国外的朋友帮忙下载。。)

我在https://www.vultr.com/上购买了一个vps。vps就在国外。所以我直接在vps上进行下载,下载好之后再将缺少的编译工具拷贝回来就可以了。前面下载的步骤一致(注意depot_tools 必须要非root用户运行才可以。),直到gclient runhooks这一步的时候。下载用的python脚本会根据平台自动跳过一些编译过去。这个时候需要去修改一下这个文件:
/depot_tools/download_from_google_storage.py
Windos平台,官方编译LibYuv详细教程-Ninja编译_第3张图片
将526行的return 0注释掉。然后重新运行 gclient runhooks
这个时候在 /src/buildtools/win/下 可以发现下载好的gn.exe和clang-format.exe
在/src/tools/luci-go/win64/下 isolate.exe 这就是我们编译时候所需要的工具。 下载不下来的朋友可以从这里拷贝

https://download.csdn.net/download/fengchu3415/10835472
百度网盘地址:
https://pan.baidu.com/s/1DtddBFVFygZI9LJBAwg28g 提取码: ct95

将可执行文件放到对应的路径下即可进行下一步的编译工作。

  1. 编译
    下面就到编译的时候了。在src目录下 新建 out\Release和 out\Debug两个目录
    运行
call gn gen out\Release "--args=is_debug=false target_cpu=\"x64\""

这一步执行之后会在Release目录下 生成一个 args.gn。如果想在VS上使用我们的编译出的库需要将args.gn改为下图所示:

is_debug = false
target_cpu = "x64"
is_clang=false 			#是否可以被VS调用。如果不添加这个生成的静态库用VS调用时会提示库损坏
is_component_build = true 	#是否生成动态库,实际上我测了没有效果,应该是用法不对

修改好之后执行

ninja -v -C out\Release

之后可以看到库已经生成完成。
Windos平台,官方编译LibYuv详细教程-Ninja编译_第4张图片
如果需要生成Debug库则运行(注意修改Debug目录下的args.gn)

call gn gen out\Debug "--args=is_debug=true target_cpu=\"x64\""
inja -v -C out\Debug

编译过程中可能会提示缺少Windows_Debug.dll 好像是这个名字。。 这个时候安装下win10SDK即可。
获取地址:

https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk

参考

介绍怎么编译的。帮助很大
https://blog.csdn.net/aabcd123456/article/details/78982528
ninja编译参数相关
https://www.jianshu.com/p/9d7a6e9ed777
https://www.jianshu.com/p/48579c0c5d44
https://blog.csdn.net/u011382962/article/details/81706804?utm_source=blogxgwz1

你可能感兴趣的:(libyuv,ninja,windows)