无法安装 cargo wasm-pack

can't install cargo wasm-pack

当我 运行 cargo install wasm-pack 在 windows 10 64 位上我得到这个错误:

error: failed to run custom build command for `openssl-sys v0.9.65`

Caused by:
  process didn't exit successfully: `C:\Users\vilgo\AppData\Local\Temp\cargo-install2J8ZNz\release\build\openssl-sys-932395a164949059\build-script-main` (exit code: 101)
  --- stdout
  cargo:rustc-cfg=const_fn
  cargo:rerun-if-env-changed=X86_64_PC_WINDOWS_MSVC_OPENSSL_NO_VENDOR
  X86_64_PC_WINDOWS_MSVC_OPENSSL_NO_VENDOR unset
  cargo:rerun-if-env-changed=OPENSSL_NO_VENDOR
  OPENSSL_NO_VENDOR unset
  openssl-src: Enable the assembly language routines in building OpenSSL.
  running "perl" "./Configure" "--prefix=C:\Users\vilgo\AppData\Local\Temp\cargo-install2J8ZNz\release\build\openssl-sys-a51d272dcebf1fc5\out\openssl-build\install" "no-dso" "no-shared" "no-ssl3" "no-unit-test" "no-comp" "no-zlib" "no-zlib-dynamic" "no-md2" "no-rc5" "no-weak-ssl-ciphers" "no-camellia" "no-idea" "no-seed" "no-engine" "VC-WIN64A"

  --- stderr
  thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound, message: "Det går inte att hitta filen." }', C:\Users\vilgo\.cargo\registry\src\github.com-1ecc6299db9ec823\openssl-src-111.15.0+1.1.1k\src\lib.rs:469:39
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
warning: build failed, waiting for other jobs to finish...
error: failed to compile `wasm-pack v0.10.0`, intermediate artifacts can be found at `C:\Users\vilgo\AppData\Local\Temp\cargo-install2J8ZNz`

Caused by:
  build failed

我该如何解决? 我 运行 它在常规 cmd 中。

确保您已经安装了Open SSL 的开发包。 例如,Ubuntu 上的 libssl-dev 或 Fedora 上的 openssl-devel。如果 OpenSSL 已经安装并且 crate 仍然无法找到它,您可以设置 OPENSSL_DIR 环境变量来指定 Open SSL 安装路径。如果您使用 windows,您可以使用 Win32/Win64 OpenSSL Installation Project 在 windows.

上提供简单的 OpenSSL 安装

问题

我认为你的问题发生是因为所有这三件事都发生了:

  1. 您可能启动了 wasm-pack 构建 from an msys shell
  2. wasm-pack 依赖于 Rust 的 OpenSSL 绑定,它默认尝试通过源构建 OpenSSL。
  3. OpenSSL 的构建脚本是用 Perl 编写的。 msys Perl 不会创建以 \ 作为目录分隔符的 Windows 路径,这会导致 OpenSSL 构建失败。

解决方案

这三个解决方案中的任何一个 都应该可以解决您的问题:

修复步骤 #3:使用本机 Windows Perl

编译 OpenSSL

确保您的默认 Perl 安装是“原生”Windows Perl,例如 Strawberry Perl。确保您的构建环境没有默认为 msys perl。然后,重新尝试从源代码编译 wasm-pack 和 OpenSSL。

修复步骤 #2:使用预编译的 OpenSSL 库

您可以从源代码构建 wasm-pack,但指示 Rust OpenSSL 绑定查找预编译的 OpenSSL。

如果您还没有,请下载并安装 vcpkg,我们将使用它来安装 OpenSSL:

git clone https://github.com/Microsoft/vcpkg.git
.\vcpkg\bootstrap-vcpkg.bat

然后使用vcpkg安装OpenSSL:

vcpkg install openssl:x64-windows-static-md

(如果这不起作用,请尝试 vcpkg install openssl:x64-windows。)

然后尝试编译 wasm-pack。设置 VCPKG_ROOT 告诉 Rust OpenSSL 构建脚本去哪里查找,同时设置 OPENSSL_NO_VENDOR=1 阻止构建脚本从源代码编译 OpenSSL。

set VCPKG_ROOT=c:\path\to\vcpkg\installation
set OPENSSL_NO_VENDOR=1
cargo install wasm-pack

修复步骤 #1:在 Windows.

上使用预编译的 wasm-pack 二进制文件

如果你不想编译 wasm-pack 或 OpenSSL,你可以使用 Windows 安装程序 (wasm-pack-init.exe)在 rustwasm downloads page. Alternatively, you could also run your wasm-pack builds in Windows Subsystem for Linux (WSL).