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描述界面布局,实现视觉与逻辑的分离,显著提升开发灵活性与维护性。
相关推荐
樱木Plus2 天前
深拷贝(Deep Copy)和浅拷贝(Shallow Copy)
c++
blasit4 天前
笔记:Qt C++建立子线程做一个socket TCP常连接通信
c++·qt·tcp/ip
阿白的白日梦4 天前
winget基础管理---更新/修改源为国内源
windows
肆忆_5 天前
# 用 5 个问题学懂 C++ 虚函数(入门级)
c++
不想写代码的星星5 天前
虚函数表:C++ 多态背后的那个男人
c++
端平入洛7 天前
delete又未完全delete
c++
端平入洛8 天前
auto有时不auto
c++
埃博拉酱8 天前
VS Code Remote SSH 连接 Windows 服务器卡在"下载 VS Code 服务器":prcdn DNS 解析失败的诊断与 BITS 断点续传
windows·ssh·visual studio code
唐宋元明清21889 天前
.NET 本地Db数据库-技术方案选型
windows·c#
加号39 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql