[英]error: failed to run custom build command for `openssl-sys v0.9.72` using Rust/Anchor
[英]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.rs
和Cargo.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-devel
和pkg-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
將變量 openssl_dir 設置為合適的 PATH
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.