我对 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 解决了该问题。
我到处搜索,但似乎没有找到任何特定于我的错误的内容。或者如果有,我也不知道如何找到它。
您可以通过首先在 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
命令进行验证。