Windows系统中使用MinGW-W64(gcc/g++或LLVM)编译Skia源码的方法

Windows系统中使用MinGW-W64(gcc/g++或LLVM)编译Skia源码的方法

  • 修改日期:2026-02-10
  • 操作系统:Windows 11 64位版本
  • 编译器:MinGW-W64 gcc/g++ or LLVM-MinGW
  • 说明1:本文档介绍Windows系统中使用MinGW-W64(gcc/g++)或者LLVM-MinGW编译Skia源码的方法
  • 说明2:该编译Skia源码的方法,是为了适配nim_duilib项目使用Skia库,如果用于其他库使用,可能需要修改编译参数
  • 说明3:获取skia源码后,需要更新部分源码(更新方法见后续文档),否则编译无法通过。(使用了一个第三方库:expat)
  • 说明4:操作过程中,假设源码的根目录是D:\develop目录,如果使用其他目录,可替换为实际的目录。

一、准备工作:安装必备的软件

  1. 安装python v3.11.x(如果本机已经安装了python v3,可以跳过这个步骤)
    (python的主版本需要是v3,需要添加到Path环境变量,以便于能够直接用python.exe启动python程序)
    (1)首先安装python
    (2)在Windows的设置里面,关闭python.exe和python3.exe的"应用执行别名",否则编译skia的脚本执行有问题。Windows设置入口:设置 -> 应用 -> 高级应用设置 -> 应用执行别名
    (3)到python.exe所在目录中,复制一份python.exe,改名为python3.exe: 确保命令行参数中可以访问到python3.exe
    (4)验证:确保命令行参数中可以访问到python.exe和python3.exe
  2. 安装git(如果本机已经安装了git,可以跳过这个步骤)
    (git需要添加到Path环境变量,确保命令行参数中可以访问到git.exe)
    (1)Git For Windows: 2.44版本
    (2)TortoiseGit:2.15版本
  3. 获取MinGW-w64编译环境(如果本机已经安装了MinGW-w64,可以跳过这个步骤)
    (1)下载网址:https://www.mingw-w64.org/downloads/
    (2)mingw64 LLVM(推荐)
    下载地址:https://github.com/mstorsjo/llvm-mingw/releases
    下载链接:https://github.com/mstorsjo/llvm-mingw/releases/download/20250430/llvm-mingw-20250430-ucrt-x86_64.zip
    下载后解压到目录:C:\mingw64目录,gcc/g++最终目录为:C:\mingw64\llvm-mingw-20250430-ucrt-x86_64\bin
    (3)mingw64 gcc/g++
    下载地址:https://github.com/niXman/mingw-builds-binaries/releases
    下载链接:https://github.com/niXman/mingw-builds-binaries/releases/download/15.1.0-rt_v12-rev0/x86_64-15.1.0-release-win32-seh-ucrt-rt_v12-rev0.7z
    下载后解压到目录:C:\mingw64目录,gcc/g++最终目录为:C:\mingw64\x86_64-15.1.0-release-win32-seh-ucrt-rt_v12-rev0\mingw64\bin

二、使用脚本自动编译(推荐)

该脚本自动完成相关源码下载和编译工作。

选定一个工作目录,创建一个脚本build.bat,将下面已经整理好脚本复制进去,保存文件。

脚本文件内容如下:

复制代码
echo OFF
set retry_delay=10
:retry_clone_skia_compile
if not exist ".\skia_compile" (
    git clone https://github.com/rhett-lee/skia_compile
) else (     
    git -C ./skia_compile pull
)
if %errorlevel% neq 0 (
    timeout /t %retry_delay% >nul
    goto retry_clone_skia_compile
)

.\skia_compile\mingw64\build_skia_all_in_one.bat

进入命令行控制台,设置PATH环境变量(如果编译环境已经添加到PATH变量,可忽略这个步骤:

复制代码
SET PATH=%PATH%;C:\mingw64\llvm-mingw-20250430-ucrt-x86_64\bin

最后运行该脚本:

复制代码
.\build.bat

编译时如果获取skia_compile代码失败,可以多重试几次。

编译完成的库文件在工作目录的skia/out子目录中,按编译选项放在相应的子目录。

三、手动编译过程

第1步:获取skia源码和修改的源码

  1. 获取skia源码:
    (1)> mkdir D:\develop
    (2)> cd /d D:\develop
    (3)> git clone https://github.com/google/skia.git
    (4)> git checkout 34aa71b8bee4648a442b7125680232d803374f19
  2. 应用修改的代码:
    (1)> cd /d D:\develop
    (2)> git clone https://github.com/rhett-lee/skia_compile(下载源码和文档)
    (3) 解压skia.2026-02-10.src.zip到目录skia.2026-02-10.src
    (4) 将目录skia.2026-02-10.src中的所有内容,复制到D:\develop\skia目录中,覆盖所有同名文件
    (5) 注意事项:该修改的代码的SHA-1值,需要比对,如果不是这个版本的代码,直接覆盖可能有问题。

第2步:编译skia(编译器:mingw64 llvm)(推荐)

  1. 运行cmd.exe命令行环境
  2. 设置PATH环境变量:
    > SET PATH=%PATH%;C:\mingw64\llvm-mingw-20250430-ucrt-x86_64\bin
    > clang++ -v
  3. 进入skia源码目录:
    > cd /d D:\develop\skia
  4. 编译skia静态库(mingw64 llvm,x64)
  • .\bin\gn.exe gen out/mingw64-llvm.x64.release --args="target_cpu=\"x64\" cc=\"clang\" cxx=\"clang++\" is_trivial_abi=false is_official_build=true skia_use_libwebp_encode=false skia_use_libwebp_decode=false skia_use_libpng_encode=false skia_use_libpng_decode=false skia_use_zlib=false skia_use_libjpeg_turbo_encode=false skia_use_libjpeg_turbo_decode=false skia_enable_fontmgr_win_gdi=false skia_use_icu=false skia_use_expat=false skia_use_xps=false skia_enable_pdf=false skia_use_wuffs=false skia_enable_svg=true skia_use_expat=true skia_use_system_expat=false is_debug=false extra_cflags=[\"-DSK_DISABLE_LEGACY_PNG_WRITEBUFFER\"]"
  • .\bin\ninja.exe -C out/mingw64-llvm.x64.release
  1. 编译skia静态库(mingw64 llvm,x86)
  • .\bin\gn.exe gen out/mingw64-llvm.x86.release --args="target_cpu=\"x86\" cc=\"clang\" cxx=\"clang++\" is_trivial_abi=false is_official_build=true skia_use_libwebp_encode=false skia_use_libwebp_decode=false skia_use_libpng_encode=false skia_use_libpng_decode=false skia_use_zlib=false skia_use_libjpeg_turbo_encode=false skia_use_libjpeg_turbo_decode=false skia_enable_fontmgr_win_gdi=false skia_use_icu=false skia_use_expat=false skia_use_xps=false skia_enable_pdf=false skia_use_wuffs=false skia_enable_svg=true skia_use_expat=true skia_use_system_expat=false is_debug=false extra_cflags=[\"-DSK_DISABLE_LEGACY_PNG_WRITEBUFFER\"]"
  • .\bin\ninja.exe -C out/mingw64-llvm.x86.release

第2步:编译skia(编译器:mingw64 gcc/g++)

  1. 运行cmd.exe命令行环境
  2. 设置PATH环境变量:
    > SET PATH=%PATH%;C:\mingw64\x86_64-15.1.0-release-win32-seh-ucrt-rt_v12-rev0\mingw64\bin
    > g++ -v
  3. 进入skia源码目录:
    > cd /d D:\develop\skia
  4. 编译skia静态库(mingw64 gcc/g++,x64)
  • .\bin\gn.exe gen out/mingw64-gcc.x64.release --args="target_cpu=\"x64\" cc=\"gcc\" cxx=\"g++\" is_trivial_abi=false is_official_build=true skia_use_libwebp_encode=false skia_use_libwebp_decode=false skia_use_libpng_encode=false skia_use_libpng_decode=false skia_use_zlib=false skia_use_libjpeg_turbo_encode=false skia_use_libjpeg_turbo_decode=false skia_enable_fontmgr_win_gdi=false skia_use_icu=false skia_use_expat=false skia_use_xps=false skia_enable_pdf=false skia_use_wuffs=false skia_enable_svg=true skia_use_expat=true skia_use_system_expat=false is_debug=false extra_cflags=[\"-DSK_DISABLE_LEGACY_PNG_WRITEBUFFER\"]"
  • .\bin\ninja.exe -C out/mingw64-gcc.x64.release
  1. 编译skia静态库(mingw64 gcc/g++,x86)
  • .\bin\gn.exe gen out/mingw64-gcc.x86.release --args="target_cpu=\"x86\" cc=\"gcc\" cxx=\"g++\" is_trivial_abi=false is_official_build=true skia_use_libwebp_encode=false skia_use_libwebp_decode=false skia_use_libpng_encode=false skia_use_libpng_decode=false skia_use_zlib=false skia_use_libjpeg_turbo_encode=false skia_use_libjpeg_turbo_decode=false skia_enable_fontmgr_win_gdi=false skia_use_icu=false skia_use_expat=false skia_use_xps=false skia_enable_pdf=false skia_use_wuffs=false skia_enable_svg=true skia_use_expat=true skia_use_system_expat=false is_debug=false extra_cflags=[\"-DSK_DISABLE_LEGACY_PNG_WRITEBUFFER\"]"
  • .\bin\ninja.exe -C out/mingw64-gcc.x86.release

四、资源链接

  1. Skia的编译文档库,如需获取最新版本的文档,请点击访问:skia_compile
  2. nim_duilib界面库的代码库,请点击访问:nim_duilib
    nim_duilib 是一款基于C++开发的跨平台界面库,源于经典的 duilib 界面库并进行了深度优化与功能扩展,支持Windows/Linux/macOS/FreeBSD平台,支持的Linux系统包括OpenEuler、OpenKylin、UbuntuKylin、统信UOS、中科方德、Ubuntu、Fedora、Debian等,专注于简化桌面应用的高效开发。其设计融合了DirectUI理念,通过XML描述界面布局,实现视觉与逻辑的分离,显著提升开发灵活性与维护性。
相关推荐
钛态1 小时前
Flutter for OpenHarmony 实战:YAML — 结构化配置解析专家
flutter·ui·华为·架构·harmonyos
bug智造2 小时前
Windows右下角时间不显示秒
windows
徐先生 @_@|||2 小时前
Windows 的高级进程监视器Microsoft - Process Monitor
windows
wangluoqi2 小时前
c++ 数据结构-树状数组、线段树 小总结
开发语言·数据结构·c++
工业HMI实战笔记2 小时前
机床设备HMI:加工参数可视化与故障诊断界面
ui·性能优化·自动化·汽车·交互
非凡ghost2 小时前
Ookla Speedtest安卓版(网速测试工具)
android·windows·学习·智能手机·软件需求
在黎明的反思2 小时前
文件级建议性锁函数flock
c语言·c++
Volunteer Technology2 小时前
LangGraph的WorkFlow(二)
linux·windows·python