簡體   English   中英

為什么即使在本地安裝后 rust 也無法為 openssl-sys v0.9.60 構建命令?

[英]Why rust is failing to build command for openssl-sys v0.9.60 even after local installation?

在嘗試構建我的 rust 程序時,我遇到了failed to run custom build command for openssl-sys v0.9.60的錯誤。 這是main.rsCargo.toml文件。

主要.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());
}

貨物.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 (如本問題中所建議),使用:

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"

我注意到我已經在我的默認路徑中安裝了anaconda openssl 要將 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

看起來 rust 正在/usr/local/ssl/lib中搜索 ssl。 事實上,我的電腦中有一個/usr/local/ssl文件夾,但那里沒有lib

我在這里做錯了什么? 如何使我本地安裝的 openssl 與 rust 正確配合使用?

我自己沒有安裝它的經驗,但也許可以提供一些指示。

首先是關於您安裝 OpenSSL 的努力。 克隆存儲庫后,在配置和制作之前不要 select 任何特定的分支。 這意味着您正在構建master分支,它是 OpenSSL 3.0.0 的演進版本。 根據crate 的文檔,這不是受支持的版本。 為了構建受支持的 OpenSSL 版本,您必須切換到某些 1.1.1 分支或標簽。 或者,您可以從OpenSSL 的下載頁面下載 1.1.1 版本。

也就是說,似乎沒有必要從源代碼安裝 OpenSSL。 Automatic部分,文檔解釋說 crate 可以處理各種典型的 OpenSSL 安裝。 如果可能的話,您可能更容易遵循這一點。 如果是這樣,那么您應該取消設置OPENSSL_DIR環境變量,否則它將(繼續)覆蓋 crate 的自動機制以查找 OpenSSL 安裝。

如果您仍然想堅持手動配置,那么您確實應該使用環境變量,並且OPENSSL_DIR似乎很方便。 但是,它與您在配置命令./config --openssldir=/usr/local/ssl中使用的openssldir參數的含義不同。 要獲取詳細信息,請查看該配置參數的含義 實際上, OPENSSL_DIR的 crate 的含義對應於--prefix設置(您沒有配置)。

您現在遇到的問題是您的OPENSSL_DIR變量指向 OpenSSL 配置文件的目錄,而 crate 期望它指向實際 OpenSSL 安裝目錄樹的頂部(在您的情況下,它似乎位於/usr/local )。

這解決了我在 Ubuntu 中的問題:

sudo apt install libssl-dev

在 fedora 36 上,我收到錯誤消息:嘗試使用cargo install cargo-generate cargo-generate時, error: failed to run custom build command for openssl-sys v0.9.77

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) at./Configure 第 15 行。

解決方案是:

sudo dnf install perl

令人驚訝的是, perl已經安裝,但通過運行sudo dnf install perl "some additional perl stuff" 安裝解決了問題!

我使用了以下一組命令

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

跑:

sudo apt install pkg-config

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

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

這對我有用:

sudo apt install librust-openssl-sys-dev

我在 Linux (Ubuntu) 的 Windows 子系統上運行了 rust。 以下命令對我有用。

sudo apt install libssl-dev

sudo apt install pkg-config

Rust 文檔

Rust 文檔為我解決了這個問題。 以下鏈接中包含的所有操作系統選項。

https://docs.rs/openssl/latest/openssl/#automatic

將變量 openssl_dir 設置為合適的 PATH

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM