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

标签 rust openssl

我正面临错误 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());
}
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/

相关文章:

rust - 在 Rust 的编译时部分应用?

asynchronous - 如何将 warp 与异步库集成?

PHP 到 MySQL 使用 SSL

generics - 解析数字的通用函数因 "FromStr is not implemented"而失败

rust - 如何将 &str 转换为 *const u8?

random - 如何用种子确定性地洗牌数组?

python - 如何使用python将PEM转换为P7B

c++ - 使用 C/C++ 和 openssl 处理单个 AES-128-ECB block

c - 使 openssl RSA 算法具有确定性

php - openssl_pkey_new 抛出错误配置文件例程 :NCONF_get_string:no value