Tại sao gỉ không thể xây dựng lệnh cho openssl-sys v0.9.60 ngay cả sau khi cài đặt cục bộ?
Tôi đang gặp lỗi failed to run custom build command for openssl-sys v0.9.60
trong khi cố gắng xây dựng chương trình gỉ của mình. Đây là main.rs
và các Cargo.toml
tập tin.
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"
Tôi đã cài đặt openssl cục bộ (như được đề xuất trong câu hỏi này ), sử dụng:
git clone git://git.openssl.org/openssl.git
cd openssl
./config --openssldir=/usr/local/ssl
make
make test
sudo make install
Cuối cùng, tôi đã chạy export OPENSSL_DIR="/usr/local/ssl"
Tôi lưu ý rằng tôi đã có một cài đặt anaconda của openssl nằm trong đường dẫn mặc định của tôi. Để thay đổi đường dẫn mặc định của openssl thành cài đặt github, tôi đã chạy chmod -x MYPATH/anaconda3/bin/openssl
và bây giờ which openssl
quay trở lại /usr/local/bin/openssl
.
Tôi cũng đã cài đặt pkg-config (như được đề xuất trong câu hỏi này ). Chạy which pkg-config
trả lại/usr/bin/pkg-config
Tuy nhiên, khi tôi chạy cargo run
lại chương trình in thông báo lỗi tương tự. Đây là toàn bộ thông báo lỗi:
> 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
Có vẻ như rỉ sét đang tìm kiếm ssl trong /usr/local/ssl/lib
. Trên thực tế, có một /usr/local/ssl
thư mục trong PC của tôi, nhưng không lib
có ở đó.
Tôi làm gì sai ở đây? Làm thế nào để cài đặt openssl cục bộ của tôi hoạt động với rỉ sét một cách chính xác?
Trả lời
Bản thân tôi không có kinh nghiệm cài đặt cái này nhưng có thể đưa ra một số gợi ý.
Trước hết về nỗ lực của bạn để cài đặt OpenSSL. Sau khi nhân bản kho lưu trữ, bạn không chọn bất kỳ nhánh cụ thể nào trước khi định cấu hình và thực hiện. Điều này có nghĩa là bạn đang xây dựng master
chi nhánh, đây là phiên bản phát triển của OpenSSL 3.0.0. Đây không phải là phiên bản được hỗ trợ theo tài liệu của thùng . Để xây dựng phiên bản OpenSSL được hỗ trợ, bạn sẽ phải chuyển sang một số nhánh hoặc thẻ 1.1.1. Ngoài ra, bạn có thể tải xuống phiên bản 1.1.1 từ trang tải xuống của OpenSSL .
Điều đó nói rằng, có vẻ như không cần thiết phải cài đặt OpenSSL từ nguồn. Trong phần Tự động , tài liệu giải thích rằng thùng có thể xử lý tất cả các loại cài đặt OpenSSL điển hình. Bạn có thể dễ dàng làm theo điều đó hơn, nếu có thể trong trường hợp của bạn. Nếu vậy, bạn nên bỏ đặt OPENSSL_DIR
biến môi trường nếu không sẽ (tiếp tục) ghi đè các cơ chế tự động của thùng để tìm cài đặt OpenSSL.
Nếu bạn vẫn muốn gắn bó với cấu hình Thủ công , thì thực sự bạn nên sử dụng các biến môi trường, và OPENSSL_DIR
có vẻ như một biến môi trường thuận tiện. Tuy nhiên, nó không có nghĩa giống với openssldir
tham số mà bạn đã sử dụng trong lệnh cấu hình của mình ./config --openssldir=/usr/local/ssl
. Để biết chi tiết, hãy kiểm tra ý nghĩa của thông số cấu hình đó . Trong thực tế, ý nghĩa của thùng của OPENSSL_DIR
tương ứng với các --prefixthiết lập (mà bạn không cấu hình).
Vấn đề bạn đang gặp phải bây giờ là OPENSSL_DIR
biến của bạn trỏ đến thư mục của bạn cho các tệp cấu hình OpenSSL, trong khi thùng mong đợi nó trỏ đến đầu cây thư mục cài đặt OpenSSL thực tế (trong trường hợp của bạn dường như nằm ở /usr/local
).