ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Windows系统中使用LLVM或Visual Studio 2022编译Skia源码的方法

Windows系统中使用LLVM或Visual Studio 2022编译Skia源码的方法 Windows系统中使用LLVM或Visual Studio 2022编译Skia源码的方法修改日期2026-02-10操作系统Windows 11 64位版本Windows SDK10.0.26100.0版本编译器LLVM 或者 Visual Studio 2022 中的一种说明1本文档介绍Windows系统中使用LLVM或Visual Studio 2022编译Skia源码的方法说明2该编译Skia源码的方法是为了适配nim_duilib项目使用Skia库如果用于其他库使用可能需要修改编译参数说明3为了提升Debug版本的运行性能在Debug版本的编译中使用Release版本相同的编译参数只是把运行时库从/MT换成/MTd。说明4获取skia源码后需要更新部分源码更新方法见后续文档否则编译无法通过。使用了一个第三方库expat说明5操作过程中假设源码的根目录是D:\develop目录如果使用其他目录可替换为实际的目录。一、准备工作安装必备的软件安装python3python的主版本需要是3需要添加到Path环境变量1首先安装python32在Windows的设置里面关闭python.exe和python3.exe的应用执行别名否则编译skia的脚本执行有问题。Windows设置入口设置 - 应用 - 高级应用设置 - 应用执行别名3到python.exe所在目录中复制一份python.exe改名为python3.exe: 确保命令行参数中可以访问到python3.exe4在命令行验证 python3.exe --version可以查看python的版本号安装Git For Windows: 2.44版本git需要添加到Path环境变量确保命令行参数中可以访问到git.exe安装Visual Studio 2022社区版可选安装LLVM21.1.4 Win64 版本1安装目录C:\LLVM2注意事项安装目录中不能有空格否则编译会遇到问题。二、使用脚本自动编译推荐该脚本自动完成相关源码下载和编译工作。选定一个工作目录创建一个脚本build.bat将下面已经整理好脚本复制进去保存文件。脚本文件内容如下echo OFF set retry_delay10 :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\windows\build_skia_all_in_one.bat进入命令行控制台运行该脚本.\build.bat编译完成的库文件在工作目录的skia/out子目录中按编译选项放在相应的子目录。三、手动编译过程第1步获取skia源码和修改的源码获取skia源码1mkdir D:\develop2cd /d D:\develop3git clone https://github.com/google/skia.git4git checkout 34aa71b8bee4648a442b7125680232d803374f19应用修改的代码1cd /d D:\develop2git 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编译器LLVM推荐1编译64位的Libx64版本首先进入命令行提示符cmd.exe进入skia源码目录cd /d D:\develop\skia编译skia静态库llvm.x64.debug.\bin\gn.exe gen out/llvm.x64.debug --idevs2022 --slnskia --argstarget_cpu\x64\ cc\clang\ cxx\clang\ clang_win\C:/LLVM\ is_trivial_abifalse is_official_buildtrue skia_use_libwebp_encodefalse skia_use_libwebp_decodefalse skia_use_libpng_encodefalse skia_use_libpng_decodefalse skia_use_zlibfalse skia_use_libjpeg_turbo_encodefalse skia_use_libjpeg_turbo_decodefalse skia_enable_fontmgr_win_gdifalse skia_use_icufalse skia_use_expatfalse skia_use_xpsfalse skia_enable_pdffalse skia_use_wuffsfalse skia_enable_svgtrue skia_use_expattrue skia_use_system_expatfalse is_debugfalse extra_cflags[\-DSK_DISABLE_LEGACY_PNG_WRITEBUFFER\,\/MTd\].\bin\ninja.exe -C out/llvm.x64.debug如果需要重新编译可以先用命令清理.\bin\ninja.exe -C out/llvm.x64.debug -t clean编译skia静态库llvm.x64.release.\bin\gn.exe gen out/llvm.x64.release --idevs2022 --slnskia --argstarget_cpu\x64\ cc\clang\ cxx\clang\ clang_win\C:/LLVM\ is_trivial_abifalse is_official_buildtrue skia_use_libwebp_encodefalse skia_use_libwebp_decodefalse skia_use_libpng_encodefalse skia_use_libpng_decodefalse skia_use_zlibfalse skia_use_libjpeg_turbo_encodefalse skia_use_libjpeg_turbo_decodefalse skia_enable_fontmgr_win_gdifalse skia_use_icufalse skia_use_expatfalse skia_use_xpsfalse skia_enable_pdffalse skia_use_wuffsfalse skia_enable_svgtrue skia_use_expattrue skia_use_system_expatfalse is_debugfalse extra_cflags[\-DSK_DISABLE_LEGACY_PNG_WRITEBUFFER\,\/MT\].\bin\ninja.exe -C out/llvm.x64.release2编译32位的Libx86版本首先进入命令行提示符cmd.exe进入skia源码目录cd /d D:\develop\skia编译skia静态库llvm.x86.release.\bin\gn.exe gen out/llvm.x86.release --idevs2022 --slnskia --argstarget_cpu\x86\ cc\clang\ cxx\clang\ clang_win\C:/LLVM\ is_trivial_abifalse is_official_buildtrue skia_use_libwebp_encodefalse skia_use_libwebp_decodefalse skia_use_libpng_encodefalse skia_use_libpng_decodefalse skia_use_zlibfalse skia_use_libjpeg_turbo_encodefalse skia_use_libjpeg_turbo_decodefalse skia_enable_fontmgr_win_gdifalse skia_use_icufalse skia_use_expatfalse skia_use_xpsfalse skia_enable_pdffalse skia_use_wuffsfalse skia_enable_svgtrue skia_use_expattrue skia_use_system_expatfalse is_debugfalse extra_cflags[\-DSK_DISABLE_LEGACY_PNG_WRITEBUFFER\,\/MT\].\bin\ninja.exe -C out/llvm.x86.release编译skia静态库llvm.x86.debug.\bin\gn.exe gen out/llvm.x86.debug --idevs2022 --slnskia --argstarget_cpu\x86\ cc\clang\ cxx\clang\ clang_win\C:/LLVM\ is_trivial_abifalse is_official_buildtrue skia_use_libwebp_encodefalse skia_use_libwebp_decodefalse skia_use_libpng_encodefalse skia_use_libpng_decodefalse skia_use_zlibfalse skia_use_libjpeg_turbo_encodefalse skia_use_libjpeg_turbo_decodefalse skia_enable_fontmgr_win_gdifalse skia_use_icufalse skia_use_expatfalse skia_use_xpsfalse skia_enable_pdffalse skia_use_wuffsfalse skia_enable_svgtrue skia_use_expattrue skia_use_system_expatfalse is_debugfalse extra_cflags[\-DSK_DISABLE_LEGACY_PNG_WRITEBUFFER\,\/MTd\].\bin\ninja.exe -C out/llvm.x86.debug第2步编译skia编译器Visual Studio 2022不推荐1编译64位的Libx64版本首先进入vs 2022的64位命令行编译环境:x64 Native Tools Command Prompt for VS 2022进入skia源码目录cd /d D:\develop\skia编译skia静态库msvc.x64.release.\bin\gn.exe gen out/msvc.x64.release --idevs2022 --slnskia --argstarget_cpu\x64\ is_trivial_abifalse is_official_buildtrue skia_use_libwebp_encodefalse skia_use_libwebp_decodefalse skia_use_libpng_encodefalse skia_use_libpng_decodefalse skia_use_zlibfalse skia_use_libjpeg_turbo_encodefalse skia_use_libjpeg_turbo_decodefalse skia_enable_fontmgr_win_gdifalse skia_use_icufalse skia_use_expatfalse skia_use_xpsfalse skia_enable_pdffalse skia_use_wuffsfalse skia_enable_svgtrue skia_use_expattrue skia_use_system_expatfalse is_debugfalse extra_cflags[\-DSK_DISABLE_LEGACY_PNG_WRITEBUFFER\,\/MT\].\bin\ninja.exe -C out/msvc.x64.release编译skia静态库msvc.x64.debug.\bin\gn.exe gen out/msvc.x64.debug --idevs2022 --slnskia --argstarget_cpu\x64\ is_trivial_abifalse is_official_buildtrue skia_use_libwebp_encodefalse skia_use_libwebp_decodefalse skia_use_libpng_encodefalse skia_use_libpng_decodefalse skia_use_zlibfalse skia_use_libjpeg_turbo_encodefalse skia_use_libjpeg_turbo_decodefalse skia_enable_fontmgr_win_gdifalse skia_use_icufalse skia_use_expatfalse skia_use_xpsfalse skia_enable_pdffalse skia_use_wuffsfalse skia_enable_svgtrue skia_use_expattrue skia_use_system_expatfalse is_debugfalse extra_cflags[\-DSK_DISABLE_LEGACY_PNG_WRITEBUFFER\,\/MTd\].\bin\ninja.exe -C out/msvc.x64.debug2编译32位的Libx86版本首先进入vs 2022的32位命令行编译环境:x86 Native Tools Command Prompt for VS 2022进入skia源码目录cd /d D:\develop\skia编译skia静态库msvc.x86.release.\bin\gn.exe gen out/msvc.x86.release --idevs2022 --slnskia --argstarget_cpu\x86\ is_trivial_abifalse is_official_buildtrue skia_use_libwebp_encodefalse skia_use_libwebp_decodefalse skia_use_libpng_encodefalse skia_use_libpng_decodefalse skia_use_zlibfalse skia_use_libjpeg_turbo_encodefalse skia_use_libjpeg_turbo_decodefalse skia_enable_fontmgr_win_gdifalse skia_use_icufalse skia_use_expatfalse skia_use_xpsfalse skia_enable_pdffalse skia_use_wuffsfalse skia_enable_svgtrue skia_use_expattrue skia_use_system_expatfalse is_debugfalse extra_cflags[\-DSK_DISABLE_LEGACY_PNG_WRITEBUFFER\,\/MT\].\bin\ninja.exe -C out/msvc.x86.release编译skia静态库msvc.x86.debug.\bin\gn.exe gen out/msvc.x86.debug --idevs2022 --slnskia --argstarget_cpu\x86\ is_trivial_abifalse is_official_buildtrue skia_use_libwebp_encodefalse skia_use_libwebp_decodefalse skia_use_libpng_encodefalse skia_use_libpng_decodefalse skia_use_zlibfalse skia_use_libjpeg_turbo_encodefalse skia_use_libjpeg_turbo_decodefalse skia_enable_fontmgr_win_gdifalse skia_use_icufalse skia_use_expatfalse skia_use_xpsfalse skia_enable_pdffalse skia_use_wuffsfalse skia_enable_svgtrue skia_use_expattrue skia_use_system_expatfalse is_debugfalse extra_cflags[\-DSK_DISABLE_LEGACY_PNG_WRITEBUFFER\,\/MTd\].\bin\ninja.exe -C out/msvc.x86.debug四、为何使用LLVM编译Skia因为LLVM编译的代码执行性能明显比VS好。用VS编译的代码运行时有明显卡顿现象尤其时Debug版。五、资源链接Skia的编译文档库如需获取最新版本的文档请点击访问skia_compilenim_duilib界面库的代码库请点击访问nim_duilibnim_duilib 是一款基于C开发的跨平台界面库源于经典的 duilib 界面库并进行了深度优化与功能扩展支持Windows/Linux/macOS/FreeBSD平台支持的Linux系统包括OpenEuler、OpenKylin、UbuntuKylin、统信UOS、中科方德、Ubuntu、Fedora、Debian等专注于简化桌面应用的高效开发。其设计融合了DirectUI理念通过XML描述界面布局实现视觉与逻辑的分离显著提升开发灵活性与维护性。
返回列表