ローカルインストール後でも、rustがopenssl-sys v0.9.60のコマンドのビルドに失敗するのはなぜですか?

Jan 04 2021

failed to run custom build command for openssl-sys v0.9.60錆びたプログラムを作成しようとしているときにエラーが発生しました。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ののインスタレーションに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私のPCにはフォルダーがありますが、そこにはありませんlib

私はここで何が間違っているのですか?opensslのローカルインストールを錆で正しく機能させるにはどうすればよいですか?

回答

4 ReinierTorenbeek Jan 04 2021 at 04:04

私はこれを自分でインストールした経験はありませんが、いくつかの指針を与えることができるかもしれません。

まず、OpenSSLをインストールするための取り組みについてです。リポジトリのクローンを作成した後、構成および作成する前に特定のブランチを選択することはありません。これmasterは、OpenSSL3.0.0の進化バージョンであるブランチを構築していることを意味します。クレートのドキュメントによると、これはサポートされているバージョンではありません。サポートされているバージョンのOpenSSLを構築するには、1.1.1ブランチまたはタグに切り替える必要があります。または、OpenSSLのダウンロードページから1.1.1バージョンをダウンロードすることもできます。

とはいえ、OpenSSLをソースからインストールする必要はないようです。[自動]セクションのドキュメントでは、クレートがあらゆる種類の一般的なOpenSSLインストールを処理できると説明されています。あなたの場合、可能であれば、それに従う方が簡単かもしれません。その場合は、OPENSSL_DIR環境変数の設定を解除する必要があります。そうしないと、OpenSSLのインストールを見つけるためにクレートの自動メカニズムがオーバーライドされます(続行されます)。

それでも手動構成を使い続けたい場合は、実際に環境変数を使用する必要がありOPENSSL_DIR、便利なようです。ただし、openssldirconfigureコマンドで使用したパラメーターと同じ意味ではありません./config --openssldir=/usr/local/ssl。詳細を取得するには、その構成パラメーターの意味を確認してください。実際、クレートの意味は、(構成しなかった)設定にOPENSSL_DIR対応して--prefixいます。

現在発生している問題は、OPENSSL_DIR変数がOpenSSL構成ファイルのディレクトリを指しているのに対し、クレートは実際のOpenSSLインストールディレクトリツリー(この場合はにあるようです/usr/local)の最上位を指していることを想定していることです。