Rust, yerel kurulumdan sonra bile openssl-sys v0.9.60 için komut oluşturmada neden başarısız oluyor?

Jan 04 2021

failed to run custom build command for openssl-sys v0.9.60Pas programımı oluşturmaya çalışırken hatayla karşılaşıyorum . İşte main.rsve Cargo.tomldosyalar.

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"

Openssl'yi yerel olarak kurdum (bu soruda önerildiği gibi ), şunu kullanarak:

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

Sonunda koştum export OPENSSL_DIR="/usr/local/ssl"

Varsayılan yolumda olan bir anaconda openssl kurulumuna sahip olduğumu not ettim . Openssl'nin varsayılan yolunu github kurulumuna değiştirmek için çalıştırdım chmod -x MYPATH/anaconda3/bin/opensslve şimdi which opensslgeri dönüyor /usr/local/bin/openssl.

Ayrıca pkg-config'i de yükledim (bu soruda önerildiği gibi ). Çalışan which pkg-configiadeler/usr/bin/pkg-config

Ancak, cargo runtekrar çalıştırdığımda program aynı hata mesajını yazdırıyor. İşte tüm hata mesajı:

> 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

Görünüşe göre pas, ssl'yi arıyor /usr/local/ssl/lib. Aslında /usr/local/sslbilgisayarımda bir klasör var ama yok lib.

Burada neyi yanlış yapıyorum? Yerel openssl kurulumumu pasla doğru şekilde nasıl çalıştırabilirim?

Yanıtlar

4 ReinierTorenbeek Jan 04 2021 at 04:04

Bunu kendim yüklemekle ilgili deneyimim yok, ancak bazı ipuçları verebilirim.

Öncelikle OpenSSL'yi kurma çabanızla ilgili. Depoyu klonladıktan sonra, yapılandırmadan ve yapmadan önce herhangi bir şube seçmezsiniz. Bu master, OpenSSL 3.0.0'ın gelişen bir sürümü olan dalı oluşturduğunuz anlamına gelir . Bu, sandığın belgelerine göre desteklenen bir sürüm değildir . OpenSSL'nin desteklenen bir sürümünü oluşturmak için, bazı 1.1.1 dalına veya etiketine geçmeniz gerekecektir. Alternatif olarak, 1.1.1 sürümünü OpenSSL'nin indirme sayfasından indirebilirsiniz .

Bununla birlikte, OpenSSL'yi kaynaktan yüklemek gerekli görünmüyor. Otomatik bölümü altında, belgeler, kasanın her tür tipik OpenSSL kurulumuyla başa çıkabileceğini açıklar. Sizin durumunuzda mümkünse, bunu takip etmeniz sizin için daha kolay olabilir. Öyleyse, OPENSSL_DIRortam değişkeninin ayarını kaldırmalısınız, aksi takdirde bu, OpenSSL kurulumunu bulmak için sandığın otomatik mekanizmalarını geçersiz kılar (devam eder).

Hala Manuel konfigürasyona bağlı kalmak istiyorsanız, o zaman gerçekten de ortam değişkenlerini kullanmalısınız ve OPENSSL_DIRuygun bir tane gibi görünüyor. Ancak, openssldirconfigure komutunuzda kullandığınız parametre ile aynı anlama gelmez ./config --openssldir=/usr/local/ssl. Ayrıntıları almak için , o yapılandırma parametresinin anlamını kontrol edin . Aslında, bir sandık en anlamı OPENSSL_DIRiçin karşılık gelir ayarında (Yapılandırmak vermedi).--prefix

Şu anda karşılaştığınız sorun, OPENSSL_DIRdeğişkeninizin OpenSSL yapılandırma dosyaları için dizini göstermesidir, oysa sandık, bunun gerçek OpenSSL kurulum dizini ağacının (sizin durumunuzda burada bulunuyor gibi görünmesini bekler /usr/local).