Warum kann Rost den Befehl für openssl-sys v0.9.60 auch nach lokaler Installation nicht erstellen?

Jan 04 2021

failed to run custom build command for openssl-sys v0.9.60Beim Versuch, mein Rostprogramm zu erstellen , tritt der Fehler auf. Hier sind die main.rsund die Cargo.tomlDateien.

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"

Ich habe openssl lokal installiert (wie in dieser Frage vorgeschlagen ) und dabei Folgendes verwendet:

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

Schließlich rannte ich export OPENSSL_DIR="/usr/local/ssl"

Ich habe festgestellt, dass ich bereits eine Anaconda-Installation von openssl hatte, die sich in meinem Standardpfad befand. Um den Standardpfad von openssl zu der Github-Installation zu ändern , die ich ausgeführt habe chmod -x MYPATH/anaconda3/bin/opensslund die jetzt which opensslzurückkehrt /usr/local/bin/openssl.

Ich habe auch pkg-config installiert (wie in dieser Frage vorgeschlagen ). Running which pkg-configkehrt zurück/usr/bin/pkg-config

Wenn ich cargo rundas Programm jedoch erneut starte, wird dieselbe Fehlermeldung ausgegeben. Hier ist die gesamte Fehlermeldung:

> 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

Es sieht so aus, als würde Rost nach SSL suchen /usr/local/ssl/lib. Tatsächlich befindet sich /usr/local/sslauf meinem PC ein Ordner, aber dort ist kein Ordner libvorhanden.

Was mache ich hier falsch? Wie kann meine lokale Installation von openssl korrekt mit Rost funktionieren?

Antworten

4 ReinierTorenbeek Jan 04 2021 at 04:04

Ich habe keine Erfahrung mit der Installation selbst, kann aber möglicherweise einige Hinweise geben.

Zunächst zu Ihren Bemühungen, OpenSSL zu installieren. Nach dem Klonen des Repositorys wählen Sie vor dem Konfigurieren und Erstellen keinen bestimmten Zweig aus. Dies bedeutet, dass Sie den masterZweig erstellen, bei dem es sich um eine sich entwickelnde Version von OpenSSL 3.0.0 handelt. Dies ist keine unterstützte Version gemäß der Dokumentation der Kiste . Um eine unterstützte Version von OpenSSL zu erstellen, müssen Sie zu einem 1.1.1-Zweig oder -Tag wechseln. Alternativ können Sie die Version 1.1.1 von der OpenSSL-Downloadseite herunterladen .

Es scheint jedoch nicht notwendig zu sein, OpenSSL von der Quelle zu installieren. Im Abschnitt Automatisch wird in der Dokumentation erläutert, dass die Kiste alle Arten von typischen OpenSSL-Installationen verarbeiten kann. Es kann für Sie einfacher sein, dem zu folgen, wenn dies in Ihrem Fall möglich ist. Wenn ja, sollten Sie die OPENSSL_DIRUmgebungsvariable deaktivieren, da sonst die automatischen Mechanismen der Kiste (weiterhin) außer Kraft gesetzt werden, um die OpenSSL-Installation zu finden.

Wenn Sie sich weiterhin an die manuelle Konfiguration halten möchten, sollten Sie in der Tat Umgebungsvariablen verwenden, und dies OPENSSL_DIRscheint praktisch zu sein. Dies bedeutet jedoch nicht dasselbe wie der openssldirParameter, den Sie in Ihrem Konfigurationsbefehl verwendet haben ./config --openssldir=/usr/local/ssl. Überprüfen Sie die Bedeutung dieses Konfigurationsparameters, um die Details zu erhalten . Tatsächlich OPENSSL_DIRentspricht die Bedeutung der Kiste der --prefixEinstellung (die Sie nicht konfiguriert haben).

Das Problem, auf das Sie jetzt stoßen, ist, dass Ihre OPENSSL_DIRVariable auf Ihr Verzeichnis für OpenSSL-Konfigurationsdateien verweist, während die Kiste erwartet, dass sie auf den Anfang des tatsächlichen OpenSSL-Installationsverzeichnisbaums verweist (in dem sich in Ihrem Fall zu befinden scheint /usr/local).