เหตุใดสนิมจึงล้มเหลวในการสร้างคำสั่งสำหรับ openssl-sys v0.9.60 แม้หลังจากการติดตั้งภายในเครื่อง

Jan 04 2021

ฉันพบข้อผิดพลาดfailed to run custom build command for openssl-sys v0.9.60ขณะพยายามสร้างโปรแกรมสนิม นี่คือmain.rsและCargo.tomlไฟล์

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ในเครื่อง (ตามที่แนะนำในคำถามนี้) โดยใช้:

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

สุดท้ายผมก็วิ่ง export OPENSSL_DIR="/usr/local/ssl"

ฉันสังเกตว่าฉันมีการติดตั้งopenssl อนาคอนดาซึ่งอยู่ในเส้นทางเริ่มต้นของฉันแล้ว ในการเปลี่ยนเส้นทางเริ่มต้นของopensslเป็นการติดตั้ง github ฉันรันchmod -x MYPATH/anaconda3/bin/opensslและตอนนี้which opensslกลับ/usr/local/bin/opensslมา

ฉันยังติดตั้งpkg-configไว้ด้วย (ตามที่แนะนำในคำถามนี้) กำลังเรียกใช้which pkg-configผลตอบแทน/usr/bin/pkg-config

อย่างไรก็ตามเมื่อฉันเรียกใช้cargo runอีกครั้งโปรแกรมจะพิมพ์ข้อความแสดงข้อผิดพลาดเดียวกัน นี่คือข้อความแสดงข้อผิดพลาดทั้งหมด:

> 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

ดูเหมือนว่าการเกิดสนิมที่มีการค้นหา SSL /usr/local/ssl/libใน อันที่จริงมี/usr/local/sslโฟลเดอร์อยู่ในพีซีของฉัน แต่ไม่มีlibอยู่

ฉันทำอะไรผิดที่นี่? จะทำให้การติดตั้ง openssl ในพื้นที่ของฉันทำงานกับสนิมอย่างถูกต้องได้อย่างไร

คำตอบ

4 ReinierTorenbeek Jan 04 2021 at 04:04

ฉันไม่มีประสบการณ์ในการติดตั้งสิ่งนี้ด้วยตัวเอง แต่อาจให้คำแนะนำได้

ก่อนอื่นเกี่ยวกับความพยายามของคุณในการติดตั้ง OpenSSL หลังจากการโคลนที่เก็บคุณไม่ได้เลือกสาขาใดสาขาหนึ่งก่อนกำหนดค่าและสร้าง ซึ่งหมายความว่าคุณกำลังสร้างmasterสาขาซึ่งเป็นเวอร์ชันที่พัฒนาขึ้นของ OpenSSL 3.0.0 นี้ไม่ได้เป็นรุ่นที่ได้รับการสนับสนุนตามเอกสารลังของ ในการสร้าง OpenSSL เวอร์ชันที่รองรับคุณจะต้องเปลี่ยนไปใช้บางสาขาหรือแท็ก 1.1.1 หรือคุณสามารถดาวน์โหลดเวอร์ชัน 1.1.1 จากหน้าดาวน์โหลด OpenSSL ของ

ที่กล่าวมาดูเหมือนว่าจะไม่จำเป็นต้องติดตั้ง OpenSSL จากแหล่งที่มา ภายใต้ส่วนอัตโนมัติเอกสารอธิบายว่าลังสามารถจัดการกับการติดตั้ง OpenSSL ทั่วไปได้ทุกประเภท อาจจะง่ายกว่าสำหรับคุณที่จะทำตามนั้นถ้าเป็นไปได้ในกรณีของคุณ หากเป็นเช่นนั้นคุณควรยกเลิกการตั้งค่าOPENSSL_DIRตัวแปรสภาพแวดล้อมมิฉะนั้นจะ (ดำเนินการต่อไป) แทนที่กลไกอัตโนมัติของลังเพื่อค้นหาการติดตั้ง OpenSSL

หากคุณยังต้องการยึดติดกับการกำหนดค่าด้วยตนเองคุณควรใช้ตัวแปรสภาพแวดล้อมและOPENSSL_DIRดูเหมือนจะสะดวก แต่ก็ไม่ได้หมายความว่าสิ่งเดียวกันเป็นพารามิเตอร์ที่คุณใช้ในคำสั่งกำหนดค่าของคุณopenssldir ./config --openssldir=/usr/local/sslหากต้องการทราบรายละเอียดโปรดตรวจสอบความหมายของพารามิเตอร์การกำหนดค่านั้น ในความเป็นจริงความหมายของลังOPENSSL_DIRสอดคล้องกับการ--prefixตั้งค่า (ซึ่งคุณไม่ได้กำหนดค่า)

ปัญหาที่คุณพบในตอนนี้คือOPENSSL_DIRตัวแปรของคุณชี้ไปที่ไดเร็กทอรีของคุณสำหรับไฟล์คอนฟิกูเรชัน OpenSSL ในขณะที่ลังคาดว่าจะชี้ไปที่ด้านบนสุดของแผนผังไดเร็กทอรีการติดตั้ง OpenSSL จริง (ซึ่งในกรณีของคุณดูเหมือนจะอยู่ที่/usr/local)