Windows环境VS2017编译skia库-m84,亲测成功,使用官方编译的方法

简介: Windows环境VS2017编译skia库-m84,亲测成功,使用官方编译的方法

环境准备


Windows7/10电脑需要能访问https://skia.org/https://skia.googlesource.com/skia.git

在Windows上安装Visual Studio 2017

在Windows上安装Python v2.7.x(必须是v2,不能使用v3),32位版本,例如python-2.7.18.msi。环境变量path需要添加python v2.7.x。如果电脑同时还装了v3,那么环境变量path需要把v2排在v3前面。

image.png


在Windows终端输入命令"python --version"可以查看python2是否正确安装。

image.png


在Windows上安装Git工具


下载源码和依赖库


截止目前,skia的版本是m84,https://skia.googlesource.com/skia.git/+refs


我们使用Windows终端命令行,把源码下载:


1、先设置git http代理:


>git config --global http.proxy http://127.0.0.1:8000

>git config --global https.proxy http://127.0.0.1:8000


设置成功,代理信息会记录在C:\Users\firecat\.gitconfig


2、再用git命令下载skia源码


>git clone https://skia.googlesource.com/skia.git


3、再下载依赖库

>cd skia

>python tools/git-sync-deps



下载gn和ninja工具


网上有好心人已经准备好了,直接下载就行了,然后解压到\skia\bin里面。环境变量path需要添加bin路径,例如我的路径是:


F:\tmp-source\qt-hmi\skia\skia\bin


下载链接:https://download.csdn.net/download/qq_35824650/12398406


本人也备份了一份:https://download.csdn.net/download/libaineu2004/12432424



源码编译


参数说明

is_debug=true 表示Debug


is_component_build=true 表示动态库编译【推荐,否则是静态库编译,到时候生成的静态库运行时是MTd/MT】


target_cpu="x86" 表示Win32平台


ide=vs 表示使用VS IDE编译 【不推荐,容易出错】



x64位 Debug编译:

>bin\gn gen out\Debug64

>bin\gn args out\Debug64


#这句话输入之后,会弹出一个记事本文件,请手动输入要编译的参数


# Set build arguments here. See `gn help buildargs`.

is_debug=true

is_component_build=true


保存记事本,然后继续终端命令


>bin\gn gen out\Debug64

>bin\ninja -C out\Debug64



x64位 Release编译:

>bin\gn gen out\Release64

>bin\gn args out\Release64

# Set build arguments here. See `gn help buildargs`.

is_debug=false

is_component_build=true

>bin\gn gen out\Release64

>bin\ninja -C out\Release64



x86位 Debug编译:

>bin\gn gen out\Debug86

>bin\gn args out\Debug86

# Set build arguments here. See `gn help buildargs`.

is_debug=true

is_component_build=true

target_cpu="x86"

>bin\gn gen out\Debug86


#执行ninja之前,需要先打开路径\skia\out\Debug86的toolchain.ninja文件,手动删除所有


"cmd /c C:/Program Files (x86)/Windows Kits/10/bin/SetEnv.cmd /x86 &&"的文本内容,


#进入文件夹C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64


拷贝以下3个文件到\skia\out\Debug86


msobj140.dll

mspdb140.dll

mspdbcore.dll

>bin\ninja -C out\Debug86



x86位 Release编译:

>bin\gn gen out\Release86

>bin\gn args out\Release86

# Set build arguments here. See `gn help buildargs`.

is_debug=false

is_component_build=true

target_cpu="x86"

>bin\gn gen out\Release86


#执行ninja之前,需要先打开路径\skia\out\Release86的toolchain.ninja文件,手动删除所有


"cmd /c C:/Program Files (x86)/Windows Kits/10/bin/SetEnv.cmd /x86 &&"的文本内容,


#进入文件夹C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64


拷贝以下3个文件到\skia\out\Release86


msobj140.dll

mspdb140.dll

mspdbcore.dll


>bin\ninja -C out\Release86



常用的gn命令


bin\gn help args

bin\gn help static_library

bin\gn help buildargs

bin\gn args --list out\Release64

bin\gn args --list out\Debug64

bin\gn args --list out\Release86

bin\gn args --list out\Debug86

bin\ninja -help


之前编译失败的命令,也记录一下


不建议使用VS的编译方式,容易失败


>bin/gn gen out/Static --args="is_official_build=true skia_use_libpng=false skia_use_zlib=false skia_use_libjpeg_turbo=false skia_use_harfbuzz=false skia_use_libwebp=false skia_use_expat=false"

vs要用管理员身份打开,不然编译的时候会报错,说什么没有访问权限

x64 Debug

>bin\gn gen out/vsx64d --ide=vs --args="is_debug=true is_official_build=false is_component_build=true"

x64 Release

>bin\gn gen out/vsx64 --ide=vs --args="is_debug=false is_official_build=false is_component_build=true"

x86 Debug

>bin\gn gen out/vsx86d --ide=vs --args="is_debug=true is_official_build=false is_component_build=true target_cpu=\"x86\""

x86 Release

>bin\gn gen out/vsx86 --ide=vs --args="is_debug=false is_official_build=false is_component_build=true target_cpu=\"x86\""


最终编译好的库文件/头文件/案例


https://download.csdn.net/download/libaineu2004/12436349



参考文献


https://www.jianshu.com/p/4225f4342d18 [图形引擎Skia之一]源码下载与编译(Windows)


https://blog.drawoceans.com/codes/19/ 在Windows上使用VS2017编译64位和32位Skia


https://blog.csdn.net/qq_35824650/article/details/105984644 国内正确编译V8和Skia


https://gitee.com/QtSkia/QtSkia google的 skia渲染框架, 集成到Qt中


https://gitee.com/QtSkia/QtSkia/blob/master/doc/Examples-zh.md SkCanvas是一个类似于QPainter的画笔,但性能和功能都比QPainter强大许多。


相关文章
|
2月前
|
XML C# 数据格式
掌握了在Windows平台上查看DLL依赖的方法
掌握了在Windows平台上查看DLL依赖的方法
334 4
|
26天前
|
存储 缓存 安全
硬盘数据恢复:恢复硬盘数据的9个实用方法(Windows版)
无论是工作文档、家庭照片,还是其他珍贵的数字资产,数据丢失总是一件让人头疼的事情。然而,当硬盘发生问题时,不必过于慌张——只要正确应对,许多数据都可以被成功恢复。本文将从常见数据丢失原因到具体恢复方法,为您提供全面的硬盘数据恢复指导。
|
2月前
|
人工智能 JavaScript 网络安全
ToB项目身份认证AD集成(三完):利用ldap.js实现与windows AD对接实现用户搜索、认证、密码修改等功能 - 以及针对中文转义问题的补丁方法
本文详细介绍了如何使用 `ldapjs` 库在 Node.js 中实现与 Windows AD 的交互,包括用户搜索、身份验证、密码修改和重置等功能。通过创建 `LdapService` 类,提供了与 AD 服务器通信的完整解决方案,同时解决了中文字段在 LDAP 操作中被转义的问题。
|
2月前
|
弹性计算 数据安全/隐私保护 Windows
阿里云国际版无法远程连接Windows服务器的排查方法
阿里云国际版无法远程连接Windows服务器的排查方法
|
2月前
|
安全 Windows
Windows系统实现exe服务注册的方法都有哪些?
【10月更文挑战第5天】Windows系统实现exe服务注册的方法都有哪些?
484 0
|
2月前
|
数据可视化 程序员 C#
C#中windows应用窗体程序的输入输出方法实例
C#中windows应用窗体程序的输入输出方法实例
56 0
|
2月前
|
网络协议 安全 调度
关闭Windows自动更新的6种方法
本文介绍了六种关闭Windows自动更新的方法,包括使用服务管理器、组策略编辑器、修改注册表、任务计划程序、网络连接设置和命令行。
1534 0
|
1天前
|
安全 关系型数据库 MySQL
Windows Server 安装 MySQL 8.0 详细指南
安装 MySQL 需要谨慎,特别注意安全配置和权限管理。根据实际业务需求调整配置,确保数据库的性能和安全。
26 9
|
1月前
|
网络安全 Windows
Windows server 2012R2系统安装远程桌面服务后无法多用户同时登录是什么原因?
【11月更文挑战第15天】本文介绍了在Windows Server 2012 R2中遇到的多用户无法同时登录远程桌面的问题及其解决方法,包括许可模式限制、组策略配置问题、远程桌面服务配置错误以及网络和防火墙问题四个方面的原因分析及对应的解决方案。
|
1月前
|
监控 安全 网络安全
使用EventLog Analyzer日志分析工具监测 Windows Server 安全威胁
Windows服务器面临多重威胁,包括勒索软件、DoS攻击、内部威胁、恶意软件感染、网络钓鱼、暴力破解、漏洞利用、Web应用攻击及配置错误等。这些威胁严重威胁服务器安全与业务连续性。EventLog Analyzer通过日志管理和威胁分析,有效检测并应对上述威胁,提升服务器安全性,确保服务稳定运行。