Mengapa Rust gagal membangun perintah untuk openssl-sys v0.9.60 bahkan setelah instalasi lokal?

Jan 04 2021

Saya menghadapi kesalahan failed to run custom build command for openssl-sys v0.9.60saat mencoba membangun program karat saya. Ini main.rsdan Cargo.tomlfile-nya.

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"

Saya menginstal openssl secara lokal (seperti yang disarankan dalam pertanyaan ini ), menggunakan:

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

Akhirnya saya lari export OPENSSL_DIR="/usr/local/ssl"

Saya mencatat bahwa saya sudah memiliki instalasi anaconda dari openssl yang ada di jalur default saya. Untuk mengubah jalur default dari openssl ke instalasi github, saya menjalankan chmod -x MYPATH/anaconda3/bin/openssldan sekarang which opensslkembali /usr/local/bin/openssl.

Saya juga menginstal pkg-config (seperti yang disarankan dalam pertanyaan ini ). Menjalankan which pkg-configkembali/usr/bin/pkg-config

Namun, ketika saya menjalankan cargo runlagi program tersebut mencetak pesan kesalahan yang sama. Berikut ini seluruh pesan kesalahan:

> 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

Sepertinya karat itu mencari ssl in /usr/local/ssl/lib. Sebenarnya, ada /usr/local/sslfolder di PC saya, tapi tidak libada.

Apa yang saya lakukan salah di sini? Bagaimana cara membuat instalasi opensl lokal saya bekerja dengan karat dengan benar?

Jawaban

4 ReinierTorenbeek Jan 04 2021 at 04:04

Saya tidak memiliki pengalaman menginstal ini sendiri tetapi mungkin dapat memberikan beberapa petunjuk.

Pertama-tama tentang upaya Anda untuk menginstal OpenSSL. Setelah mengkloning repositori, Anda tidak memilih cabang tertentu sebelum mengkonfigurasi dan membuatnya. Ini berarti Anda sedang membangun mastercabang, yang merupakan versi OpenSSL 3.0.0 yang terus berkembang. Ini bukan versi yang didukung menurut dokumentasi peti . Untuk membuat versi OpenSSL yang didukung, Anda harus beralih ke beberapa cabang atau tag 1.1.1. Atau, Anda dapat mengunduh versi 1.1.1 dari halaman unduhan OpenSSL .

Meskipun demikian, tampaknya tidak perlu menginstal OpenSSL dari sumber. Di bawah bagian Otomatis , dokumentasi menjelaskan bahwa peti dapat menangani semua jenis instalasi OpenSSL yang khas. Mungkin lebih mudah bagi Anda untuk mengikutinya, jika mungkin dalam kasus Anda. Jika demikian, Anda harus membatalkan setelan OPENSSL_DIRvariabel lingkungan jika tidak, yang akan (terus) menimpa mekanisme otomatis peti untuk menemukan penginstalan OpenSSL.

Jika Anda masih ingin tetap menggunakan konfigurasi Manual , maka memang Anda harus menggunakan variabel lingkungan, dan OPENSSL_DIRtampaknya yang paling nyaman. Namun, itu tidak berarti sama dengan openssldirparameter yang Anda gunakan dalam perintah konfigurasi Anda ./config --openssldir=/usr/local/ssl. Untuk mendapatkan detailnya, lihat arti dari parameter konfigurasi itu . Bahkan, makna peti tentang OPENSSL_DIRbersesuaian dengan para --prefixpengaturan (yang Anda tidak configure).

Masalah yang Anda hadapi sekarang adalah bahwa OPENSSL_DIRvariabel Anda menunjuk ke direktori Anda untuk file konfigurasi OpenSSL, sedangkan peti mengharapkannya untuk menunjuk ke bagian atas pohon direktori instalasi OpenSSL yang sebenarnya (yang dalam kasus Anda tampaknya berada di /usr/local).