我在try 构建rust程序时遇到了错误failed to run custom build command for openssl-sys v0.9.60.下面是主要的rsCargo 汤姆文件.

主要的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 汤姆

[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只水 Python ,这是我的默认路径.要将默认路径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/主要的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正确运行?

推荐答案

我自己没有安装这个的经验,但可能能给一些建议.

首先是关于你安装OpenSSL的努力.克隆存储库后,在配置和创建之前,您不会 Select 任何特定分支.这意味着您正在构建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似乎是一个方便的变量.但是,它的含义与configure命令./config --openssldir=/usr/local/ssl中使用的openssldir参数不同.要了解详细信息,请查看the meaning of that configuration parameter.事实上, crate 的OPENSSL_DIR对应于the --prefix setting(您没有配置).

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

Rust相关问答推荐

计算具有相邻调换且没有插入或删除的序列的距离

即使参数和结果具有相同类型,fn的TypId也会不同

在Tauri中获取ICoreWebView 2_7以打印PDF

从Rust调用C++虚拟方法即使在成功执行之后也会引发Access违规错误

在特征中使用Async时,如何解决不透明类型`impl Future<;out=self>;`不满足其关联的类型边界和警告?

无法理解铁 rust &S错误处理

在执行其他工作的同时,从共享裁判后面的VEC中删除重复项

在铁 rust 中传递所有权

对于rustc编译的RISC-V32IM二进制文件,llvm objdump没有输出

什么时候使用FuturesOrdered?

如何将 struct 数组放置在另一个 struct 的末尾而不进行内存分段

从 rust 函数返回 &HashMap

使用 Option 来分配?

Rust 中指向自身的引用如何工作?

当在lambda中通过引用传递时,为什么会出现终身/类型不匹配错误?

在线程中运行时,TCPListener(服务器)在 ip 列表中的服务器实例之前没有从客户端接受所有客户端的请求

如何在 Rust 中将 bson::Bson 转换为 Vec

如何在 Rust 中将 UTF-8 十六进制值转换为 char?

为什么-x试图解析为文字并在声明性宏中失败?

在同一向量 Rust 中用另一个字符串扩展一个字符串