Perché rust non riesce a creare il comando per openssl-sys v0.9.60 anche dopo l'installazione locale?

Jan 04 2021

Sto affrontando l'errore failed to run custom build command for openssl-sys v0.9.60mentre provo a costruire il mio programma rust. Ecco main.rsi Cargo.tomlfile 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/openssle ora which opensslritorna /usr/local/bin/openssl.

Ho anche installato pkg-config (come suggerito in questa domanda ). which pkg-configRitorni correnti/usr/bin/pkg-config

Tuttavia, quando eseguo di cargo runnuovo 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/sslcartella nel mio PC, ma non libc'è.

Cosa sto facendo di sbagliato qui? Come posso far funzionare correttamente la mia installazione locale di openssl con la ruggine?

Risposte

4 ReinierTorenbeek Jan 04 2021 at 04:04

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 masterramo, 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_DIRvariabile 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_DIRsembra conveniente. Tuttavia, non ha lo stesso significato del openssldirparametro 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_DIRcorrisponde alla --prefiximpostazione (che non è stato configurato).

Il problema che stai incontrando ora è che la tua OPENSSL_DIRvariabile 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).