在 Visual Studio Cde 中使用 Rust 货物。错误:无法执行:“sh”“-c”“../gmp-src/configure --enable-fat --disable-shared --with-pic”

问题描述 投票:0回答:1

我对 Rust 编码还很陌生,所以我可能还不明白很多事情。在其他板条箱中,我一直在尝试安装 Symbolica 板条箱以在我的项目中使用。到目前为止,安装所有其他板条箱时完全没有任何问题。我这样做的方法是输入

name_of_crate = "version"
。保存文件时,Rust 分析器已自动构建。但当我尝试安装 Symbolica 时,情况有所不同。它给了我以下错误:

ERROR rust_analyzer::main_loop: FetchBuildDataError:
error: failed to run custom build command for `gmp-mpfr-sys v1.6.2`
note: To improve backtraces for build dependencies, set the CARGO_PROFILE_DEV_BUILD_OVERRIDE_DEBUG=true environment variable to enable debug information generation.

Caused by:
  process didn't exit successfully: `C:\Users\arki\Desktop\RUST-\MyRustApp\target\debug\build\gmp-mpfr-sys-208c89227956b5a0\build-script-build` (exit code: 101)
  --- stdout
  cargo:rerun-if-env-changed=GMP_MPFR_SYS_CACHE
  $ mkdir -p "C:\\Users\\arki\\Desktop\\RUST-\\MyRustApp\\target\\debug\\build\\gmp-mpfr-sys-6cd0651d19e463cc\\out\\lib"
  $ mkdir -p "C:\\Users\\arki\\Desktop\\RUST-\\MyRustApp\\target\\debug\\build\\gmp-mpfr-sys-6cd0651d19e463cc\\out\\include"
  $ rm -r "C:\\Users\\arki\\Desktop\\RUST-\\MyRustApp\\target\\debug\\build\\gmp-mpfr-sys-6cd0651d19e463cc\\out\\build"
  $ mkdir -p "C:\\Users\\arki\\Desktop\\RUST-\\MyRustApp\\target\\debug\\build\\gmp-mpfr-sys-6cd0651d19e463cc\\out\\build"
  $ ln -s "C:\\Users\\arki\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\gmp-mpfr-sys-1.6.2\\gmp-6.3.0-c" "C:\\Users\\arki\\Desktop\\RUST-\\MyRustApp\\target\\debug\\build\\gmp-mpfr-sys-6cd0651d19e463cc\\out\\build\\gmp-src"
  $ mkdir -p "C:\\Users\\arki\\Desktop\\RUST-\\MyRustApp\\target\\debug\\build\\gmp-mpfr-sys-6cd0651d19e463cc\\out\\build\\gmp-build"
  $ cd "C:\\Users\\arki\\Desktop\\RUST-\\MyRustApp\\target\\debug\\build\\gmp-mpfr-sys-6cd0651d19e463cc\\out\\build\\gmp-build"
  $ "sh" "-c" "../gmp-src/configure --enable-fat --disable-shared --with-pic"

  --- stderr
  thread 'main' panicked at C:\Users\arki\.cargo\registry\src\index.crates.io-6f17d22bba15001f\gmp-mpfr-sys-1.6.2\build.rs:1207:29:
  Unable to execute: "sh" "-c" "../gmp-src/configure --enable-fat --disable-shared --with-pic"
  stack backtrace:
     0: rust_begin_unwind
               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library\std\src/panicking.rs:645:5
     1: core::panicking::panic_fmt
               at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library\core\src/panicking.rs:72:14
     2: build_script_build::execute::{{closure}}
     3: core::result::Result<T,E>::unwrap_or_else
     4: build_script_build::execute
     5: build_script_build::configure
     6: build_script_build::build_gmp
     7: build_script_build::compile_libs
     8: build_script_build::main
     9: core::ops::function::FnOnce::call_once

我安装了MSYS64。我正在使用 GCC。

如果有帮助的话,之前在安装 Symbolica 时偶然发现一个错误,即无法以类似的方式进行符号链接,但我通过以管理员身份运行 Visual Studio Code 解决了该问题。

我到处搜索,但似乎没有找到任何特定于我的错误的内容。或者如果有,我也不知道如何找到它。

rust rust-cargo
1个回答
0
投票

您可以通过首先在 crates.io 上查找 gmp-mpfr-sys crate,然后转到 其存储库并查看其 build.rs

,找到失败的构建脚本。相关代码摘自那里:

fn execute(mut command: Command) { println!("$ {command:?}"); let status = command .status() // here comes your PANIC (line 1207): .unwrap_or_else(|_| panic!("Unable to execute: {command:?}")); if !status.success() { if let Some(code) = status.code() { panic!("Program failed with code {code}: {command:?}"); } else { panic!("Program failed: {command:?}"); } } }
查看错误中的堆栈跟踪,它是通过 

configure

build_gmp
 到达的:

fn configure(build_dir: &Path, conf_line: &OsStr) { let mut conf = Command::new("sh"); conf.current_dir(build_dir).arg("-c").arg(conf_line); execute(conf); }
fn build_gmp(env: &Environment, lib: &Path, header: &Path) {
    let build_dir = env.build_dir.join("gmp-build");
    create_dir_or_panic(&build_dir);
    println!("$ cd {build_dir:?}");
    let mut conf = String::from("../gmp-src/configure --enable-fat --disable-shared --with-pic");
    if let Some(cross_target) = env.cross_target.as_ref() {
        conf.push_str(" --host ");
        conf.push_str(cross_target);
    }
    configure(&build_dir, &OsString::from(conf));
    make_and_check(env, &build_dir);
    let build_lib = build_dir.join(".libs").join("libgmp.a");
    copy_file_or_panic(&build_lib, lib);
    let build_header = build_dir.join("gmp.h");
    copy_file_or_panic(&build_header, header);
}
我的印象是它根本找不到

sh

来执行。您可能应该尝试手动更改到 gmp 构建目录并尝试运行该 
sh
 命令进行验证。

© www.soinside.com 2019 - 2024. All rights reserved.