【问题标题】:Why rust is failing to build command for openssl-sys v0.9.60 even after local installation?为什么即使在本地安装后,rust 也无法为 openssl-sys v0.9.60 构建命令?
【发布时间】:2021-01-03 18:41:59
【问题描述】:

我在尝试构建我的 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。其实我的电脑里有一个/usr/local/ssl文件夹,但是那里没有lib

我在这里做错了什么?如何让我的本地安装的 openssl 正确使用 rust?

【问题讨论】:

    标签: rust openssl


    【解决方案1】:

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

    首先是关于您安装 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 似乎是一个方便的选择。但是,它与您在配置命令./config --openssldir=/usr/local/ssl 中使用的openssldir 参数的含义不同。要获取详细信息,请查看the meaning of that configuration parameter。实际上,OPENSSL_DIR 的 crate 的含义对应的是the --prefix setting(你没有配置)。

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

    【讨论】:

    • 我当时并没有意识到你所说的全部含义。但是对于自动安装,将 openssl = { version = "0.10", features = ["vendored"] } 添加到 Cargo.toml 就足够了。
    【解决方案2】:

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

    sudo apt install libssl-dev
    

    【讨论】:

    • 对于fedora/cantos 是yum install openssl openssl-devel -y
    【解决方案3】:

    运行:

    sudo apt install pkg-config
    

    【讨论】:

      【解决方案4】:

      我使用了以下一组命令

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

      【讨论】:

        【解决方案5】:

        将变量 openssl_dir 设置为合适的 PATH

        【讨论】:

          猜你喜欢
          • 2021-11-05
          • 1970-01-01
          • 1970-01-01
          • 2019-03-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-02
          相关资源
          最近更新 更多