Rust가 로컬 설치 후에도 openssl-sys v0.9.60에 대한 명령을 빌드하지 못하는 이유는 무엇입니까?

Jan 04 2021

failed to run custom build command for openssl-sys v0.9.60Rust 프로그램을 빌드하는 동안 오류가 발생했습니다. 다음은 main.rsCargo.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의의 소 instalation의 I의 RAN에를 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

rust가에서 ssl을 찾고있는 것 같습니다 /usr/local/ssl/lib. 사실 /usr/local/ssl내 PC 에는 폴더가 있지만 거기에는 없습니다 lib.

내가 여기서 뭘 잘못하고 있니? 내 openssl의 로컬 설치가 rust로 올바르게 작동하도록하려면 어떻게해야합니까?

답변

4 ReinierTorenbeek Jan 04 2021 at 04:04

직접 설치 한 경험이 없지만 몇 가지 지침을 제공 할 수 있습니다.

먼저 OpenSSL을 설치하려는 노력에 대해 설명합니다. 저장소를 복제 한 후 구성 및 만들기 전에 특정 분기를 선택하지 않습니다. 이는 masterOpenSSL 3.0.0의 진화 버전 인 브랜치를 구축하고 있음을 의미합니다 . 이것은 상자의 문서 에 따라 지원되는 버전이 아닙니다 . 지원되는 OpenSSL 버전을 빌드하려면 1.1.1 브랜치 또는 태그로 전환해야합니다. 또는 OpenSSL의 다운로드 페이지 에서 1.1.1 버전을 다운로드 할 수 있습니다 .

즉, 소스에서 OpenSSL을 설치할 필요가 없습니다. 자동 섹션 에서 문서는 크레이트가 모든 종류의 일반적인 OpenSSL 설치를 처리 할 수 ​​있다고 설명합니다. 귀하의 경우에 가능하다면 그것을 따르는 것이 더 쉬울 수 있습니다. 그렇다면 OPENSSL_DIROpenSSL 설치를 찾기 위해 크레이트의 자동 메커니즘을 무시 (계속) 하는 환경 변수를 설정 해제해야 합니다.

여전히 수동 구성 을 고수 하려면 환경 변수를 사용해야 OPENSSL_DIR하며 편리한 것으로 보입니다. 그러나 openssldirconfigure 명령에서 사용한 매개 변수 와 동일한 의미는 아닙니다 ./config --openssldir=/usr/local/ssl. 자세한 내용을 보려면 해당 구성 매개 변수의 의미를 확인하십시오 . 사실,의 상자의 의미 OPENSSL_DIR에 해당 설정 (당신은 구성하지 않은).--prefix

지금 당면한 문제는 OPENSSL_DIR변수가 OpenSSL 구성 파일에 대한 디렉토리를 가리키는 반면 상자는 실제 OpenSSL 설치 디렉토리 트리 (귀하의 경우에있는 것처럼 보임)의 맨 위를 가리킬 것으로 예상한다는 것 /usr/local입니다.