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

piok6c0g  于 2022-11-12  发布在  其他
关注(0)|答案(8)|浏览(414)

我在尝试构建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(如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的anaconda安装,它在我的默认路径中。为了将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,事实上我的PC中有一个/usr/local/ssl文件夹,但那里没有lib
我在这里做错了什么?怎样才能让我的openssl本地安装与rust正确工作?

oogrdqng

oogrdqng1#

我自己没有安装这个的经验,但也许可以给予一些指点。
首先是关于安装OpenSSL的工作。克隆存储库之后,在配置和make之前,您没有选择任何特定的分支。这意味着您正在构建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环境变量,否则将(继续)覆盖机箱的自动机制以查找OpenSSL安装。
如果你仍然想坚持使用手动配置,那么你确实应该使用环境变量,OPENSSL_DIR看起来是一个方便的变量。但是,它和你在configure命令./config --openssldir=/usr/local/ssl中使用的openssldir参数的含义并不相同。要了解详细信息,请查看该配置参数的含义。事实上,crate的OPENSSL_DIR含义对应于--prefix设置(您没有配置)。
您现在遇到的问题是,您的OPENSSL_DIR变量指向OpenSSL配置文件的目录,而crate期望它指向实际OpenSSL安装目录树的顶部(在您的示例中,它似乎位于/usr/local)。

polhcujo

polhcujo2#

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

sudo apt install libssl-dev
vshtjzan

vshtjzan3#

我使用了以下一组命令

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

0ejtzxu14#

跑步:

sudo apt install pkg-config
eqqqjvef

eqqqjvef5#

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

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

tsm1rwdh6#

这对我很有效:
sudo apt install librust-openssl-sys-dev

sy5wg1nm

sy5wg1nm7#

在fedora 36上,当我尝试使用cargo install cargo-generate安装cargo-generate时,我得到了error: failed to run custom build command for openssl-sys v0.9.77
已安装openssl-develpkg-config
除了主要的抱怨之外,还有一个抱怨:
在FindBin.pm@INC中找不到www.example.com(您可能需要安装FindBin模块)(@INC包含:///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
解决方案是:

sudo dnf install perl

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

jc3wubiy

jc3wubiy8#

将变量openssl_dir设置为合适的PATH

相关问题