Pourquoi rust ne parvient pas à construire la commande pour openssl-sys v0.9.60 même après l'installation locale?

Jan 04 2021

Je suis confronté à l'erreur failed to run custom build command for openssl-sys v0.9.60en essayant de construire mon programme de rouille. Voici main.rsles Cargo.tomlfichiers et.

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"

J'ai installé openssl localement (comme suggéré dans cette question ), en utilisant:

git clone git://git.openssl.org/openssl.git
cd openssl
./config --openssldir=/usr/local/ssl
make
make test
sudo make install

Enfin, j'ai couru export OPENSSL_DIR="/usr/local/ssl"

J'ai noté que j'avais déjà une installation anaconda de openssl qui était dans mon chemin par défaut. Pour changer le chemin par défaut de openssl vers l'installation github, j'ai exécuté chmod -x MYPATH/anaconda3/bin/opensslet je which opensslretourne maintenant /usr/local/bin/openssl.

J'ai également installé pkg-config (comme suggéré dans cette question ). Exécution des which pkg-configretours/usr/bin/pkg-config

Cependant, lorsque je lance à cargo runnouveau, le programme imprime le même message d'erreur. Voici le message d'erreur complet:

> 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

On dirait que la rouille est à la recherche de SSL /usr/local/ssl/lib. En fait, il y a un /usr/local/ssldossier dans mon PC, mais il n'y en a pas lib.

Qu'est-ce que je fais de mal ici? Comment faire fonctionner correctement mon installation locale d'OpenSL avec de la rouille?

Réponses

4 ReinierTorenbeek Jan 04 2021 at 04:04

Je n'ai aucune expérience avec l'installation de cela moi-même, mais je pourrai peut-être donner quelques conseils.

Tout d'abord sur vos efforts pour installer OpenSSL. Après avoir cloné le référentiel, vous ne sélectionnez aucune branche particulière avant la configuration et la création. Cela signifie que vous construisez la masterbranche, qui est une version évolutive d'OpenSSL 3.0.0. Ce n'est pas une version prise en charge selon la documentation de la caisse . Afin de créer une version prise en charge d'OpenSSL, vous devrez passer à une branche ou une balise 1.1.1. Vous pouvez également télécharger la version 1.1.1 à partir de la page de téléchargement d' OpenSSL .

Cela dit, il ne semble pas nécessaire d'installer OpenSSL à partir des sources. Dans la section Automatique , la documentation explique que la caisse peut gérer toutes sortes d'installations OpenSSL typiques. Il vous sera peut-être plus facile de suivre cela, si possible dans votre cas. Si tel est le cas, vous devez annuler la définition de la OPENSSL_DIRvariable d'environnement, sinon cela remplacera (continuera à) les mécanismes automatiques de la caisse pour trouver l'installation d'OpenSSL.

Si vous voulez toujours vous en tenir à la configuration manuelle , vous devez en effet utiliser des variables d'environnement, et cela OPENSSL_DIRsemble pratique. Cependant, cela ne signifie pas la même chose que le openssldirparamètre que vous avez utilisé dans votre commande configure ./config --openssldir=/usr/local/ssl. Pour obtenir les détails, vérifiez la signification de ce paramètre de configuration . En fait, le sens de la caisse de OPENSSL_DIRcorrespond à la --prefixmise en (que vous n'avez pas configuré).

Le problème que vous rencontrez maintenant est que votre OPENSSL_DIRvariable pointe vers votre répertoire pour les fichiers de configuration d'OpenSSL, alors que la caisse s'attend à ce qu'elle pointe vers le haut de l'arborescence réelle du répertoire d'installation d'OpenSSL (qui dans votre cas semble résider /usr/local).