Windows下从源码编译Skia

最后更新于:2022-04-01 16:03:03

在PPAPI里面绘图,可以结合第三方的图形库,比如Cairo、Skia。Google Chrome、Chromium和Android都使用Skia作为绘图引擎,我也来试试Skia,先过编译关。 > foruok原创,如需转载请关注foruok的微信订阅号“程序视界”联系foruok。 # CEF编译出的Skia不可单独用 Chromium使用Skia,[**Windows下从源码编译CEF**](http://blog.csdn.net/foruok/article/details/50498740)说明了怎么编译CEF,它会捎带着编译Chromium,里面有Skia,但它编译出来的skia_library.lib无法单独使用,加到VS工程里,报N多链接错误。 只好自己编译了。 # 单独编译Skia Windows下编译指南:[https://skia.org/user/quick/windows](https://skia.org/user/quick/windows)。首先你系统得有Python,我们编译过CEF,有了。 下载skia到这里:[https://skia.org/user/download](https://skia.org/user/download)。需要使用git,depot_tools很全,什么都有。 我们之前编译CEF,已自动下载depot_tools,在E:\sources\CEF\2526\depot_tools,设置到path中: ~~~ set path=E:\sources\CEF\2526\depot_tools;%path% ~~~ 然后使用git下载Skia: ~~~ git clone https://skia.googlesource.com/skia.git ~~~ 然后执行下列命令: ~~~ cd %SKIA_CHECKOUT_DIR% SET "GYP_GENERATORS=ninja,msvs" //告诉GYP,产生ninja构建文件和msvs构建文件 python bin/sync-and-gyp SET "GYP_GENERATORS=" ~~~ 上面命令完成后,基于ninja的构建文件在这里:E:\sources\skia\out\Release(Debug)\build.ninja。基于VS2013的解决方案在这里:E:\sources\skia\out\skia.sln。 我选择编译Release版本。默认编译“most”目标,most.ninja在这里:E:\sources\skia\out\Release\obj\gyp,它指定编译skia_lib和dm、SampleApp、HelloWorld等模块。 编译命令如下: ~~~ cd out\Release ninja ~~~ 编译到effects模块,出错了,说: > ninja: build stopped: subcommand failed. 加个参数,再来: ~~~ ninja -v > skia_build.log ~~~ 研究skia_build.log,发现错误信息如下: > [6/1807] ninja -t msvc -e environment.x86 – “E:\software\VS2013_64_update4\VC\bin\amd64_x86\cl.exe” /nologo /showIncludes /FC @obj\tools\imgslice.imgslice.obj.rsp /c ….\tools\imgslice.cpp /Foobj\tools\imgslice.imgslice.obj /Fdimgslice.pdb FAILED: ninja -t msvc -e environment.x86 – “E:\software\VS2013_64_update4\VC\bin\amd64_x86\cl.exe” /nologo /showIncludes /FC @obj\src\effects\effects.SkDisplacementMapEffect.obj.rsp /c ….\src\effects\SkDisplacementMapEffect.cpp /Foobj\src\effects\effects.SkDisplacementMapEffect.obj /Fdeffects.pdb e:\sources\skia\src\effects\skdisplacementmapeffect.cpp : error C2220: 警告被视为错误 - 没有生成“object”文件 e:\sources\skia\src\effects\skdisplacementmapeffect.cpp : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 错误C2220是因为把所有警告当做错误了,编译时加了/WX标记。而警告C4819,MSDN说,“在具有不能表示文件中所有字符的代码页的系统上编译ANSI 源文件时,出现C4819”。记得之前编译CEF(参考[**Windows下从源码编译CEF**](http://blog.csdn.net/foruok/article/details/50498740))时说要设置系统locale为英文,再试试吧。 (⊙o⊙)…,真过了。 编译完成后,lib文件和exe文件都在E:\sources\skia\out\Release目录下。有这么些skia库,见下图: ![skialibs](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-02-22_56caac343f2e6.jpg "") 试着运行一下HelloWorld.exe(在E:\sources\skia\out\Release目录下),效果如下图: ![helloworld](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-02-22_56caac3452645.jpg "") 嗯,不错,可以继续前进了。下次我会把PPAPI和Skia结合起来试试。 其他参考文章: - [**CEF Windows开发环境搭建**](http://blog.csdn.net/foruok/article/details/50468642) - [**CEF加载PPAPI插件**](http://blog.csdn.net/foruok/article/details/50485448) - [**VS2013编译最简单的PPAPI插件**](http://blog.csdn.net/foruok/article/details/50485461) - [**理解PPAPI的设计**](http://blog.csdn.net/foruok/article/details/50486788) - [**PPAPI插件与浏览器的交互过程**](http://blog.csdn.net/foruok/article/details/50494061) - [**Windows下从源码编译CEF**](http://blog.csdn.net/foruok/article/details/50498740) - [**编译PPAPI的media_stream_video示例**](http://blog.csdn.net/foruok/article/details/50498873) - [**PPAPI插件的绘图与输入事件处理**](http://blog.csdn.net/foruok/article/details/50499813) - [**在PPAPI插件中创建本地窗口**](http://blog.csdn.net/foruok/article/details/50513228) - [**PPAPI插件与浏览器的通信**](http://blog.csdn.net/foruok/article/details/50513315)
';