为什么rust即使在本地安装后也无法为openssl sys v0.9.60构建命令



我在尝试构建我的rust程序时遇到错误failed to run custom build command for openssl-sys v0.9.60。以下是main.rsCargo.toml文件。

main.rs

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(如本问题中所建议的),使用:

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的anaconda,它在我的默认路径中。为了将openssl的默认路径更改为github安装,我运行了chmod -x MYPATH/anaconda3/bin/openssl,现在which openssl返回/usr/local/bin/openssl

我还安装了pkg配置(如本问题中所建议的)。运行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?

这为我解决了Ubuntu中的问题:

sudo apt install libssl-dev

我使用了以下一组命令

sudo apt install pkg-config
sudo apt-get install libudev-dev

我自己没有安装这个程序的经验,但可能会给出一些指针。

首先介绍您安装OpenSSL的努力。克隆存储库后,在配置和创建之前,不要选择任何特定分支。这意味着您正在构建master分支,它是OpenSSL 3.0.0的一个不断发展的版本。根据板条箱的文档,这不是一个受支持的版本。为了构建受支持的OpenSSL版本,您必须切换到1.1.1分支或标记。或者,您可以从OpenSSL的下载页面下载1.1.1版本。

也就是说,似乎没有必要从源代码安装OpenSSL。在"自动"部分,文档解释了机箱可以处理各种典型的OpenSSL安装。如果可能的话,你可能更容易遵循这一点。如果是这样,那么您应该取消设置OPENSSL_DIR环境变量,否则它将(继续)覆盖机箱的自动机制来查找OpenSSL安装。

如果您仍然想坚持手动配置,那么实际上您应该使用环境变量,OPENSSL_DIR似乎是一个方便的配置。但是,它的含义与您在配置命令./config --openssldir=/usr/local/ssl中使用的openssldir参数不同。要获取详细信息,请查看该配置参数的含义。事实上,机箱中OPENSSL_DIR的含义对应于--prefix设置(您没有配置)。

您现在遇到的问题是,OPENSSL_DIR变量指向OpenSSL配置文件的目录,而机箱希望它指向实际OpenSSL安装目录树的顶部(在您的情况下,它似乎位于/usr/local)。

在fedora 36上,当我尝试使用cargo install cargo-generate安装cargo-generate时,我得到了error: failed to run custom build command for openssl-sys v0.9.77

CCD_ 26和CCD_。

在主要投诉下面还有另一个投诉:

在@INC中找不到FindBin.pm(您可能需要安装FindBin模块)(@INC包含:/usr/local/lib64/perl5/5.34/usr/local/share/perl5/5.34/usr/lib64/perl5/vendor_perl//usr/share/perl5/vendor_perl/usr/lib64/perl5/usr/share/perl5)./配置第15行。

解决方案是:

sudo dnf install perl

令人惊讶的是,perl已经安装,但通过运行sudo dnf install perl〃;一些额外的perl内容";已安装,解决了问题!

运行:

sudo apt install pkg-config

我在Linux(Ubuntu)的Windows子系统上运行了rust。以下命令对我有效。

sudo apt install libssl-dev
sudo apt install pkg-config

这对我很有用:

sudo apt install librust-openssl-sys-dev

我在Windows上的Ubuntu上使用了以下命令:

sudo apt install libudev-dev
sudo apt install libssl-dev

在Ubuntu 22.04上,我遇到了一个与此错误相关的不同问题:

运行pkg_config失败:""pkg-config" "--libs" "--cflags" "openssl"未成功退出:退出状态:1

错误:可能找不到"openssl-sys"所需的系统库"openssl"板条箱

---stderr

在pkg配置中找不到包openssl搜索路径。也许您应该添加包含`openssl.pc'到PKG_CONFIG_PATH环境变量

无包裹找到了"openssl";

我已经安装了libssl-develpkg-config

我通过搜索位于/usr/lib/x86_64-linux-gnu/pkgconfig/openssl.pc中的openssl.pc解决了这个问题。

我可以通过手动将PKG_CONFIG_PATH设置为/usr/lib/x86_64-linux-gnu/pkgconfig/来解决它。

将变量openssl_dir设置为合适的PATH

最新更新