编译Rust的skia-bindings时Ninja与LLVM相关构建失败
编译Rust的skia-bindings时遇到Ninja错误的解决方案
问题详情
编译Rust代码时,构建skia-bindings v0.53.0包失败,核心错误如下:
Checking for "C:\\Program Files\\LLVM\\bin\\clang-cl.exe" Checking for "C:\\LLVM\\bin\\clang-cl.exe" ninja: error: manifest 'build.ninja' still dirty after 100 tries
完整错误上下文:
Compiling skia-bindings v0.53.0 error: failed to run custom build command for `skia-bindings v0.53.0` Caused by: process didn't exit successfully: `C:\Users\(my user name)\Documents\Visual Studio Code\(my project)\target\debug\build\skia-bindings-c451d9d6ef96ce63\build-script-build` (exit code: 101) --- stdout cargo:rerun-if-env-changed=SKIA_DEBUG cargo:rerun-if-env-changed=SKIA_SOURCE_DIR cargo:rerun-if-env-changed=FORCE_SKIA_BUILD cargo:rerun-if-env-changed=FORCE_SKIA_BINARIES_DOWNLOAD TRYING TO DOWNLOAD AND INSTALL SKIA BINARIES: 0.53.0/ab8bc4dfa8fc85713027-x86_64-pc-windows-msvc-d3d-gl cargo:rerun-if-env-changed=SKIA_BINARIES_URL FROM: https://github.com/rust-skia/skia-binaries/releases/download/0.53.0/skia-binaries-ab8bc4dfa8fc85713027-x86_64-pc-windows-msvc-d3d-gl.tar.gz DOWNLOAD AND INSTALL FAILED: https://github.com/rust-skia/skia-binaries/releases/download/0.53.0/skia-binaries-ab8bc4dfa8fc85713027-x86_64-pc-windows-msvc-d3d-gl.tar.gz: status code 404 STARTING A FULL BUILD cargo:rerun-if-env-changed=CLANGCC cargo:rerun-if-env-changed=CC cargo:rerun-if-env-changed=CLANGCXX cargo:rerun-if-env-changed=CXX HOST: x86_64-pc-windows-msvc cargo:rerun-if-env-changed=OPT_LEVEL cargo:rerun-if-env-changed=SKIA_USE_SYSTEM_LIBRARIES cargo:rerun-if-env-changed=SDKTARGETSYSROOT cargo:rerun-if-env-changed=SDKROOT cargo:rerun-if-env-changed=VCINSTALLDIR cargo:rerun-if-env-changed=LLVM_HOME cargo:rerun-if-env-changed=USERPROFILE cargo:rerun-if-env-changed=SKIA_NINJA_COMMAND cargo:rerun-if-env-changed=SKIA_GN_COMMAND Probing 'python' Python 3 found: "python" Synchronizing Skia dependencies Skipping "bin". skia\third_party/externals/wuffs IS NOT TOP-LEVEL GIT DIRECTORY. skia\third_party/externals/piex IS NOT TOP-LEVEL GIT DIRECTORY. skia\third_party/externals/brotli IS NOT TOP-LEVEL GIT DIRECTORY. skia\third_party/externals/d3d12allocator IS NOT TOP-LEVEL GIT DIRECTORY. skia\third_party/externals/freetype IS NOT TOP-LEVEL GIT DIRECTORY. skia\third_party/externals/icu IS NOT TOP-LEVEL GIT DIRECTORY. skia\third_party/externals/harfbuzz IS NOT TOP-LEVEL GIT DIRECTORY. skia\third_party/externals/libgifcodec IS NOT TOP-LEVEL GIT DIRECTORY. skia\third_party/externals/zlib IS NOT TOP-LEVEL GIT DIRECTORY. skia\third_party/externals/expat IS NOT TOP-LEVEL GIT DIRECTORY. skia\third_party/externals/libjpeg-turbo IS NOT TOP-LEVEL GIT DIRECTORY. skia\third_party/externals/vulkanmemoryallocator IS NOT TOP-LEVEL GIT DIRECTORY. skia\third_party/externals/libpng IS NOT TOP-LEVEL GIT DIRECTORY. skia\third_party/externals/libwebp IS NOT TOP-LEVEL GIT DIRECTORY. skia\third_party/externals/spirv-cross IS NOT TOP-LEVEL GIT DIRECTORY. Skia args: is_official_build=true is_debug=false skia_enable_gpu=true skia_enable_skottie=false skia_use_gl=true skia_use_egl=false skia_use_x11=false skia_use_system_libpng=false skia_use_libwebp_encode=false skia_use_libwebp_decode=false skia_use_system_zlib=false skia_use_xps=false skia_use_dng_sdk=false cc="clang" cxx="clang++" skia_use_direct3d=true skia_use_icu=false skia_use_system_libjpeg_turbo=false win_vc="C:\Program Files\Microsoft Visual Studio\2022\Community\VC" clang_win="C:\LLVM" target_cpu="x86_64" skia_use_expat=true skia_use_system_expat=false extra_cflags=["/MD","--target=x86_64-pc-windows-msvc"] extra_asmflags=["--target=x86_64-pc-windows-msvc"] Done. Made 86 targets from 33 files in 1600ms ninja: Entering directory `C:\Users\(my user name)\Documents\Visual Studio Code\(my project)\target\debug\build\skia-bindings-24372a3e41696695\out\skia' [0/1] Regenerating ninja files ...(此处省略重复内容) --- stderr Checking for "C:\\Program Files\\LLVM\\bin\\clang-cl.exe" Checking for "C:\\LLVM\\bin\\clang-cl.exe" ninja: error: manifest 'build.ninja' still dirty after 100 tries thread 'main' panicked at '`ninja` returned an error, please check the output for details.', C:\Users\(my user name)\.cargo\registry\src\github.com-1ecc6299db9ec823\skia-bindings-0.53.0\build_support\skia\config.rs:485:5 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
已尝试的修复步骤:
- 多次重装带Build Tools的Visual Studio 2022
- 从LLVM GitHub手动安装LLVM二进制文件
- 同步系统时钟
可行解决方案
1. 替换skia-bindings版本
当前0.53.0版本对应的预编译二进制文件不存在(404错误),直接修改Cargo.toml中的skia-bindings版本为0.52.0或0.54.0,执行cargo update拉取新依赖后重新编译。
2. 指定兼容的Ninja版本
build.ninja重复生成的问题大概率和版本兼容有关:
- 下载Ninja v1.11.0或v1.10.2的二进制文件
- 将Ninja所在路径添加到系统环境变量
PATH - 执行
cargo clean清除缓存后重新编译
3. 强制使用MSVC编译器
通过环境变量跳过clang路径检测问题:
- 设置环境变量:
CC=cl.exe、CXX=cl.exe - 执行
cargo clean后重新运行cargo build
4. 彻底清除构建缓存
- 删除项目根目录下的
target文件夹 - 删除
~/.cargo/registry/src/github.com-*/skia-bindings-0.53.0目录 - 执行
cargo build --verbose重新构建,观察依赖同步过程
5. 检查路径与权限
- 确保项目路径不含中文、空格或特殊字符,避免Ninja处理路径出错
- 以管理员身份运行终端/VS Code,重新执行编译命令
内容的提问来源于stack exchange,提问作者neptune4567
相关产品推荐
相关产品推荐

