Warum kann Rost den Befehl für openssl-sys v0.9.60 auch nach lokaler Installation nicht erstellen?
failed to run custom build command for openssl-sys v0.9.60
Beim Versuch, mein Rostprogramm zu erstellen , tritt der Fehler auf. Hier sind die main.rs
und die Cargo.toml
Dateien.
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/openssl
und die jetzt which openssl
zurückkehrt /usr/local/bin/openssl
.
Ich habe auch pkg-config installiert (wie in dieser Frage vorgeschlagen ). Running which pkg-config
kehrt zurück/usr/bin/pkg-config
Wenn ich cargo run
das 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/ssl
auf meinem PC ein Ordner, aber dort ist kein Ordner lib
vorhanden.
Was mache ich hier falsch? Wie kann meine lokale Installation von openssl korrekt mit Rost funktionieren?
Antworten
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 master
Zweig 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_DIR
Umgebungsvariable 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_DIR
scheint praktisch zu sein. Dies bedeutet jedoch nicht dasselbe wie der openssldir
Parameter, 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_DIR
entspricht die Bedeutung der Kiste der --prefixEinstellung (die Sie nicht konfiguriert haben).
Das Problem, auf das Sie jetzt stoßen, ist, dass Ihre OPENSSL_DIR
Variable 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
).