जंग स्‍थानीय स्‍थापना के बाद भी Opensl-sys v0.9.60 के लिए कमांड बनाने में विफल क्‍यों है?

Jan 04 2021

मुझे failed to run custom build command for openssl-sys v0.9.60अपना जंग कार्यक्रम बनाने की कोशिश करते समय त्रुटि का सामना करना पड़ रहा है । यहाँ main.rsऔर Cargo.tomlफाइलें हैं।

मुख्य

extern crate reqwest;

fn main() {
    let mut resp = reqwest::get("http://www.governo.mg.gov.br/Institucional/Equipe").unwrap();
    assert!(resp.status().is_success());
}

कार्गो

[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"

मैंने स्थानीय रूप से ओपनस्एल स्थापित किया (जैसा कि इस प्रश्न में सुझाव दिया गया है ), का उपयोग करते हुए:

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"

मैं ध्यान दिया मैं पहले से ही की एक एनाकोंडा instalation था openssl जो मेरे डिफ़ॉल्ट पथ में था। खुलने के डिफ़ॉल्ट पथ को बदलने के लिए मैं चला गया github instalation 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है।

मुझसे यहां क्या गलत हो रहा है? जंग के साथ खुलने के कार्य की मेरी स्थानीय स्थापना कैसे सही ढंग से हो सकती है?

जवाब

4 ReinierTorenbeek Jan 04 2021 at 04:04

मुझे स्वयं इसे स्थापित करने का कोई अनुभव नहीं है लेकिन कुछ संकेत देने में सक्षम हो सकता है।

सबसे पहले OpenSSL को स्थापित करने के आपके प्रयास के बारे में। रिपॉजिटरी को क्लोन करने के बाद, आप कॉन्फ़िगर करने और बनाने से पहले किसी विशेष शाखा का चयन नहीं करते हैं। इसका मतलब है कि आप masterशाखा का निर्माण कर रहे हैं , जो ओपनएसएसएल 3.0.0 का एक विकसित संस्करण है। यह टोकरा के प्रलेखन के अनुसार समर्थित संस्करण नहीं है । ओपनएसएसएल के एक समर्थित संस्करण का निर्माण करने के लिए, आपको कुछ 1.1.1 शाखा या टैग पर स्विच करना होगा। वैकल्पिक रूप से, आप ओपनएसएसएल के डाउनलोड पेज से 1.1.1 संस्करण डाउनलोड कर सकते हैं ।

उस ने कहा, स्रोत से ओपनएसएसएल को स्थापित करना आवश्यक नहीं लगता है। सेक्शन ऑटोमैटिक के तहत , डॉक्यूमेंटेशन बताता है कि टोकरा सभी प्रकार के विशिष्ट ओपनएसएसएल इंस्टॉलेशन से निपट सकता है। यदि आपके मामले में संभव हो, तो इसका अनुसरण करना आपके लिए आसान हो सकता है। यदि ऐसा है, तो आपको OPENSSL_DIRपर्यावरण चर को परेशान करना चाहिए अन्यथा ओपनएसएसटी स्थापना को खोजने के लिए टोकरा के स्वचालित तंत्र को ओवरराइड करना (जारी रखना) होगा।

यदि आप अभी भी मैनुअल कॉन्फ़िगरेशन के साथ रहना चाहते हैं , तो वास्तव में आपको पर्यावरण चर का उपयोग करना चाहिए, और OPENSSL_DIRएक सुविधाजनक लगता है। हालांकि, इसका मतलब यह नहीं है openssldirकि आपके कॉन्फ़िगर कमांड में जिस पैरामीटर का उपयोग किया गया है ./config --openssldir=/usr/local/ssl। विवरण प्राप्त करने के लिए, उस कॉन्फ़िगरेशन पैरामीटर का अर्थ देखें । वास्तव में, के टोकरे के अर्थ OPENSSL_DIRसे मेल खाती है सेटिंग (जो आप कॉन्फ़िगर नहीं किया)।--prefix

आपके द्वारा अभी चल रही समस्या यह है कि आपका OPENSSL_DIRवैरिएबल ओपनएसएसएल कॉन्फ़िगरेशन फ़ाइलों के लिए आपकी निर्देशिका को इंगित करता है, जबकि टोकरा यह अपेक्षा करता है कि वास्तविक ओपनएसएसएल इंस्टॉलेशन डायरेक्टरी ट्री के शीर्ष पर इंगित करें (जो आपके मामले में रहता है /usr/local)।