Drawoceans的博客

认识你自己

在Windows上使用VS2017编译64位和32位Skia

最近出于某些理由想搞一搞Skia研究一下。具体是为什么研究Skia在此按下不表,单来表一表如何编译Skia。谷歌家的项目,一般编译起来都是比较费劲的。比如V8引擎我大概是折腾了一周左右才编译成功。相对而言,Skia的编译还是比较简单的。

首先,下载Skia源代码。这里推荐使用gclient来下载,直接git clone会出现找不到gn.exe的问题。下载好depot_tools并且把路径添加到环境变量之后,直接在想要下载Skia的文件夹下面敲fetch skia就行了,通过gclient来fetch会自动进行sync操作。注意这一步需要自备梯子,不知道怎么让命令行程序走代理的可以用Proxifier。

编译64位Skia的过程大体可以参考Skia官方文档How to build Skia中的Windows一节。如何配置选项又是另一个坑了,我编译64位Skia用的是如下编译选项:
bin\gn gen out/vsx64 --ide=vs --sln="skia" --args='is_debug=false is_official_build=false is_component_build=true'

而编译32位则是这样的:
bin\gn gen out/vsx86 --ide=vs --sln="skia" --args='is_debug=false is_official_build=false is_component_build=true target_cpu=\"x86\"'
需要注意的是,Windows下使用反斜杠作为路径分割符,所以要用bin\gn才能打开gn程序。其次,双引号需要反斜杠转义。

这样,在out文件夹里就会出现vsx64和vsx86两个文件夹,里面会有skia.sln,用VS2017打开就可以了。

对于64位版本,打开后不要急着按F6生成,先在解决方案资源管理器中右键解决方案,选择“重设解决方案目标”,以免出现找不到系统头文件的问题发生。然后按F6等编译完成就行了,x64版本编译起来还是很舒服的。

然而,编译32位版本就没这么舒服了。首先,打开vsx86下的toolchain.ninja文件,删除所有类似于“cmd /c C:/Program Files (x86)/Windows Kits/10/bin/SetEnv.cmd /x86 && ”的内容,保存。然后将“C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.15.26726/bin/HostX64/x64”文件夹中的“mspdbcore.dll”、“mspdb140.dll”、“msobj140.dll”三个文件复制到“../x86”文件夹中。好了,这个时候可以回到sln,重设解决方案目标,F6编译了。

编译结束之后,由于我编译的是动态库,因此会出现skia.dll,skia.dll.lib,skia.dll.exp三个文件,这样,Skia库就编译好了。