You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 22:45:39