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

Luc*_*cas 5 openssl rust

failed to run custom build command for openssl-sys v0.9.60在尝试构建 Rust 程序时遇到错误。这里是main.rsCargo.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());
}
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)

我在本地安装了openssl(如本问题中所建议),使用:

[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"
Run Code Online (Sandbox Code Playgroud)

最后,我跑了 export OPENSSL_DIR="/usr/local/ssl"

我注意到我已经在我的默认路径中安装了openssl的 anaconda 。要将openssl的默认路径更改为我运行的 github 安装chmod -x MYPATH/anaconda3/bin/openssl,现在which openssl返回/usr/local/bin/openssl.

我还安装了pkg-config(如本问题中所建议)。运行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
Run Code Online (Sandbox Code Playgroud)

看起来 rust 正在 .ssl 中搜索 ssl /usr/local/ssl/lib。事实上,/usr/local/ssl我的电脑中有一个文件夹,但没有lib

我在这里做错了什么?如何使我的 openssl 本地安装与 rust 一起正常工作?

Jul*_*nel 57

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

sudo apt install libssl-dev
Run Code Online (Sandbox Code Playgroud)

  • 对于 fedora/cantos 来说是 ```yum install openssl openssl-devel -y ``` (8认同)

Sad*_*afi 20

我使用了以下命令集

 sudo apt install pkg-config
 sudo apt-get install libudev-dev
Run Code Online (Sandbox Code Playgroud)


Rei*_*eek 14

我自己没有安装这个的经验,但也许可以提供一些指导。

首先关于您安装 OpenSSL 的努力。克隆存储库后,在配置和制作之前不要选择任何特定分支。这意味着您正在构建master分支,它是 OpenSSL 3.0.0 的演进版本。根据箱子的文档,这不是受支持的版本。为了构建受支持的 OpenSSL 版本,您必须切换到某个 1.1.1 分支或标签。或者,您可以从OpenSSL 的下载页面下载 1.1.1 版本。

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

如果您仍然想坚持使用手动配置,那么您确实应该使用环境变量,这OPENSSL_DIR似乎是一种方便的方法。openssldir但是,它与您在配置命令中使用的参数含义不同./config --openssldir=/usr/local/ssl。要了解详细信息,请查看该配置参数的含义。其实crate的意思是OPENSSL_DIR与设置--prefix(您没有配置)相对应。

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

  • 我当时并没有意识到你所说的话的全部含义。但对于自动安装,将 `openssl = { version = "0.10", features = ["vendored"] }` 添加到 Cargo.toml 就足够了。 (13认同)

小智 11

error: failed to run custom build command for openssl-sys v0.9.77在 Fedora 36 上,我在尝试安装时cargo-generate遇到了问题cargo install cargo-generate

openssl-develpkg-config已安装。

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

无法在 @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) 位于 ./Configure 第 15 行。

解决方案是:

sudo dnf install perl
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,perl已经安装了,但是通过运行sudo dnf install perl“一些额外的 perl 东西”安装了,这解决了问题!


Trầ*_*ong 7

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

sudo apt install libssl-dev

sudo apt install pkg-config
Run Code Online (Sandbox Code Playgroud)