rust - 为什么即使在本地安装后,rust 也无法为 openssl-sys v0.9.60 构建命令?
问题描述
我failed to run custom build command for openssl-sys v0.9.60
在尝试构建我的 rust 程序时遇到了错误。这是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());
}
货运.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 (如this question中所建议),使用:
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的 anaconda 。要将openssl的默认路径更改为我运行的 github 安装chmod -x MYPATH/anaconda3/bin/openssl
,现在which openssl
返回/usr/local/bin/openssl
.
我还安装了pkg-config(如this question中所建议)。跑步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 in /usr/local/ssl/lib
。事实上,/usr/local/ssl
我的电脑里有一个文件夹,但那里没有lib
。
我在这里做错了什么?如何使我的本地安装的 openssl 正确地与 rust 一起工作?
解决方案
我自己没有安装它的经验,但也许可以提供一些指示。
首先是关于您安装 OpenSSL 的努力。克隆存储库后,在配置和制作之前不要选择任何特定的分支。这意味着您正在构建master
分支,它是 OpenSSL 3.0.0 的演进版本。根据crate 的文档,这不是受支持的版本。为了构建受支持的 OpenSSL 版本,您必须切换到某个 1.1.1 分支或标签。或者,您可以从OpenSSL 的下载页面下载 1.1.1 版本。
也就是说,似乎没有必要从源代码安装 OpenSSL。在Automatic部分下,文档解释说 crate 可以处理各种典型的 OpenSSL 安装。如果可能的话,您可能更容易遵循这一点。如果是这样,那么您应该取消设置OPENSSL_DIR
环境变量,否则它将(继续)覆盖 crate 的自动机制以查找 OpenSSL 安装。
如果您仍然想坚持手动配置,那么您确实应该使用环境变量,OPENSSL_DIR
这似乎很方便。openssldir
但是,它与您在配置命令中使用的参数的含义不同./config --openssldir=/usr/local/ssl
。要获取详细信息,请查看该配置参数的含义。其实 crate 的含义OPENSSL_DIR
对应的是--prefix
设置(你没有配置)。
您现在遇到的问题是您的OPENSSL_DIR
变量指向 OpenSSL 配置文件的目录,而 crate 期望它指向实际 OpenSSL 安装目录树的顶部(在您的情况下,它似乎位于/usr/local
)。
推荐阅读
- java - 当我单击其他片段中的搜索按钮时,应用程序崩溃
- sql - 为 DEFAULT SQL 获取 null
- jenkins - 如何将 SonarQube 分析的质量门检查到工作中
- arcore - 为什么三星 Galaxy A20e 与我的 Unity 应用程序不兼容?
- jenkins - Jenkins如何使用Gcloud命令在远程主机上使用ssh执行shell脚本
- mongodb - Mongo Query根据相同的字段值和未过期的文件获取文档
- webpack - 当我使用 mini-css-extract-plugin 我得到 [webpack-cli] Invalid configuration object 错误
- node.js - 如何使用 nextJs 显示自定义 410 页面
- css - 如何去除 CUBA 平台中特定元素的阴影?
- usb - 通过自定义 c++ 应用程序从 uClinux 2.6.17 接口/访问基于 STM32 的板