Perché rust non riesce a creare il comando per openssl-sys v0.9.60 anche dopo l'installazione locale?
Sto affrontando l'errore failed to run custom build command for openssl-sys v0.9.60
mentre provo a costruire il mio programma rust. Ecco main.rs
i Cargo.toml
file e.
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"
Ho installato openssl localmente (come suggerito in questa domanda ), utilizzando:
git clone git://git.openssl.org/openssl.git
cd openssl
./config --openssldir=/usr/local/ssl
make
make test
sudo make install
Alla fine, ho corso export OPENSSL_DIR="/usr/local/ssl"
Ho notato che avevo già un'installazione anaconda di openssl che era nel mio percorso predefinito. Per modificare il percorso predefinito di openssl nell'installazione github che ho eseguito chmod -x MYPATH/anaconda3/bin/openssl
e ora which openssl
ritorna /usr/local/bin/openssl
.
Ho anche installato pkg-config (come suggerito in questa domanda ). which pkg-config
Ritorni correnti/usr/bin/pkg-config
Tuttavia, quando eseguo di cargo run
nuovo il programma stampa lo stesso messaggio di errore. Ecco l'intero messaggio di errore:
> 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
Sembra che la ruggine stia cercando ssl in /usr/local/ssl/lib
. In effetti, c'è una /usr/local/ssl
cartella nel mio PC, ma non lib
c'è.
Cosa sto facendo di sbagliato qui? Come posso far funzionare correttamente la mia installazione locale di openssl con la ruggine?
Risposte
Non ho esperienza con l'installazione di questo da solo, ma potrei essere in grado di fornire alcuni suggerimenti.
Prima di tutto sul tuo sforzo per installare OpenSSL. Dopo aver clonato il repository, non selezionare alcun ramo particolare prima di configurare e creare. Ciò significa che stai costruendo il master
ramo, che è una versione in evoluzione di OpenSSL 3.0.0. Questa non è una versione supportata secondo la documentazione del crate . Per creare una versione supportata di OpenSSL, dovrai passare a qualche ramo o tag 1.1.1. In alternativa, puoi scaricare la versione 1.1.1 dalla pagina di download di OpenSSL .
Detto questo, non sembra necessario installare OpenSSL dal sorgente. Nella sezione Automatico , la documentazione spiega che il crate può gestire tutti i tipi di installazioni tipiche di OpenSSL. Potrebbe essere più facile per te seguirlo, se possibile nel tuo caso. In tal caso, è necessario annullare l'impostazione della OPENSSL_DIR
variabile di ambiente altrimenti questa (continuerà a) sovrascrivere i meccanismi automatici del crate per trovare l'installazione di OpenSSL.
Se vuoi ancora restare con la configurazione manuale , allora dovresti davvero usare le variabili d'ambiente, e OPENSSL_DIR
sembra conveniente. Tuttavia, non ha lo stesso significato del openssldir
parametro utilizzato nel comando configure ./config --openssldir=/usr/local/ssl
. Per ottenere i dettagli, controlla il significato di quel parametro di configurazione . In realtà, il significato della cassa di OPENSSL_DIR
corrisponde alla --prefiximpostazione (che non è stato configurato).
Il problema che stai incontrando ora è che la tua OPENSSL_DIR
variabile punta alla tua directory per i file di configurazione di OpenSSL, mentre il crate si aspetta che punti all'inizio dell'attuale albero della directory di installazione di OpenSSL (che nel tuo caso sembra risiedere /usr/local
).