我正面临错误 failed to run custom build command for openssl-sys v0.9.60
在尝试构建我的 Rust 程序时。这是main.rs
和 Cargo.toml
文件。
主文件
extern crate reqwest;
fn main() {
let mut resp = reqwest::get("http://www.governo.mg.gov.br/Institucional/Equipe").unwrap();
assert!(resp.status().is_success());
}
Cargo.toml[package]
name = "get_sct"
version = "0.1.0"
authors = ["myname <myemail>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
reqwest = "0.10.10"
我安装了 openssl 本地(如此 question 中所建议的),使用:git clone git://git.openssl.org/openssl.git
cd openssl
./config --openssldir=/usr/local/ssl
make
make test
sudo make install
最后,我跑了export OPENSSL_DIR="/usr/local/ssl"
我注意到我已经安装了 openssl 这是在我的默认路径中。更改 的默认路径openssl 到我运行的 github 安装 chmod -x MYPATH/anaconda3/bin/openssl
现在 which openssl
返回 /usr/local/bin/openssl
.我也有 pkg-config 已安装(如此 question 中所建议)。运行
which pkg-config
返回 /usr/bin/pkg-config
但是,当我运行 cargo run
时程序再次打印相同的错误消息。这是整个错误消息:> cargo run
Compiling openssl-sys v0.9.60
Compiling tokio v0.2.24
Compiling pin-project-internal v0.4.27
Compiling pin-project-internal v1.0.2
Compiling mime_guess v2.0.3
Compiling url v2.2.0
error: failed to run custom build command for `openssl-sys v0.9.60`
Caused by:
process didn't exit successfully: `/PACKAGEPATH/target/debug/build/openssl-sys-db18d493257de4f7/build-script-main` (exit code: 101)
--- stdout
cargo:rustc-cfg=const_fn
cargo:rerun-if-env-changed=X86_64_UNKNOWN_LINUX_GNU_OPENSSL_LIB_DIR
X86_64_UNKNOWN_LINUX_GNU_OPENSSL_LIB_DIR unset
cargo:rerun-if-env-changed=OPENSSL_LIB_DIR
OPENSSL_LIB_DIR unset
cargo:rerun-if-env-changed=X86_64_UNKNOWN_LINUX_GNU_OPENSSL_INCLUDE_DIR
X86_64_UNKNOWN_LINUX_GNU_OPENSSL_INCLUDE_DIR unset
cargo:rerun-if-env-changed=OPENSSL_INCLUDE_DIR
OPENSSL_INCLUDE_DIR unset
cargo:rerun-if-env-changed=X86_64_UNKNOWN_LINUX_GNU_OPENSSL_DIR
X86_64_UNKNOWN_LINUX_GNU_OPENSSL_DIR unset
cargo:rerun-if-env-changed=OPENSSL_DIR
OPENSSL_DIR = /usr/local/ssl
--- stderr
thread 'main' panicked at 'OpenSSL library directory does not exist: /usr/local/ssl/lib', /home/lucas/.cargo/registry/src/github.com-1ecc6299db9ec823/openssl-sys-0.9.60/build/main.rs:66:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
warning: build failed, waiting for other jobs to finish...
error: build faile
看起来 rust 正在 /usr/local/ssl/lib
中搜索 ssl .其实还有一个/usr/local/ssl
文件夹,但没有 lib
那里。我在这里做错了什么?如何使我的 openssl 本地安装与 rust 一起正常工作?
最佳答案
我自己没有安装它的经验,但也许可以提供一些指导。
首先是关于您安装 OpenSSL 的努力。克隆存储库后,在配置和制作之前不要选择任何特定的分支。这意味着您正在构建 master
分支,它是 OpenSSL 3.0.0 的一个不断发展的版本。根据 the crate's documentation,这不是受支持的版本.为了构建受支持的 OpenSSL 版本,您必须切换到某些 1.1.1 分支或标记。或者,您可以从 OpenSSL's download page 下载 1.1.1 版本。 .
也就是说,似乎没有必要从源代码安装 OpenSSL。栏目下Automatic ,文档解释了 crate 可以处理各种典型的 OpenSSL 安装。如果可能的话,您可能更容易遵循这一点。如果是这样,那么您应该取消设置 OPENSSL_DIR
环境变量,否则将(继续)覆盖 crate 的自动机制以查找 OpenSSL 安装。
如果您仍想坚持使用 Manual配置,那么确实应该使用环境变量,和OPENSSL_DIR
似乎很方便。但是,它与openssldir
的意思并不相同。您在配置命令中使用的参数 ./config --openssldir=/usr/local/ssl
.要获取详细信息,请查看 the meaning of that configuration parameter .实际上,crate 的含义 OPENSSL_DIR
对应于 the --prefix
setting (您没有配置)。
您现在遇到的问题是您的 OPENSSL_DIR
变量指向 OpenSSL 配置文件的目录,而 crate 期望它指向实际 OpenSSL 安装目录树的顶部(在您的情况下,它似乎位于 /usr/local
)。
关于rust - 为什么即使在本地安装后,rust 也无法为 openssl-sys v0.9.60 构建命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65553557/