"Error loading target specification" 使用 Cargo 构建 WebAssembly 模块时

"Error loading target specification" when building a WebAssembly module with Cargo

我构建了一个简单的 Rust 应用程序,如下所示:

cargo new hello_world --bin

我可以使用 Rust 编译器编译成 WebAssembly,如下所示:

rustc +nightly --target wasm32-unknown-unknown -O src/main.rs

我想使用 Cargo 来管理外部依赖项,但是当我使用 cargo:

为同一目标构建时
cargo build --release --target wasm32-unknown-unknown

失败如下:

$ cargo build --release --target wasm32-unknown-unknown
error: failed to run `rustc` to learn about target-specific information

Caused by:
  process didn't exit successfully: `rustc - --crate-name ___ --print=file-names --target wasm32-unknown-unknown --crate-type bin --crate-type rlib` (exit code: 101)
--- stderr
error: Error loading target specification: Could not find specification for target "wasm32-unknown-unknown"
  |
  = help: Use `--print target-list` for a list of built-in targets

由于 wasm32-unknown-unknown 目标最近才被添加到 Rust 中,它只在夜间工具链中可用。您必须指定您希望使用夜间工具链:

cargo +nightly build --release --target wasm32-unknown-unknown
#     ^^^^^^^^

您在直接调用 rustc 时已经这样做了:

rustc +nightly --target wasm32-unknown-unknown -O src/main.rs
#     ^^^^^^^^

如果您:

可能会更容易:
  1. 在您的项目目录中使用工具链覆盖

    $ rustup override set nightly
    
  2. 在项目的 .cargo/config:

    中设置默认目标
    [build]
    target = "wasm32-unknown-unknown"
    

那你就可以cargo build --release了。 (建议暂时避免调试模式)。