¿Por qué rust no puede compilar el comando para openssl-sys v0.9.60 incluso después de la instalación local?
Me enfrento al error failed to run custom build command for openssl-sys v0.9.60
al intentar construir mi programa rust. Aquí están main.rs
los Cargo.toml
archivos y.
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"
Instalé openssl localmente (como se sugiere en esta pregunta ), usando:
git clone git://git.openssl.org/openssl.git
cd openssl
./config --openssldir=/usr/local/ssl
make
make test
sudo make install
Finalmente, corrí export OPENSSL_DIR="/usr/local/ssl"
Noté que ya tenía una instalación anaconda de openssl que estaba en mi ruta predeterminada. Para cambiar la ruta predeterminada de openssl a la instalación de github, ejecuté chmod -x MYPATH/anaconda3/bin/openssl
y ahora which openssl
regresa /usr/local/bin/openssl
.
También tengo instalado pkg-config (como se sugiere en esta pregunta ). Correr which pkg-config
devoluciones/usr/bin/pkg-config
Sin embargo, cuando vuelvo a ejecutar, cargo run
el programa imprime el mismo mensaje de error. Aquí está el mensaje de error completo:
> 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
Parece que rust está buscando ssl en /usr/local/ssl/lib
. De hecho, hay una /usr/local/ssl
carpeta en mi PC, pero no hay ninguna lib
.
¿Qué estoy haciendo mal aquí? ¿Cómo puedo hacer que mi instalación local de openssl funcione correctamente con rust?
Respuestas
No tengo experiencia con la instalación de esto por mí mismo, pero es posible que pueda dar algunos consejos.
En primer lugar, sobre su esfuerzo por instalar OpenSSL. Después de clonar el repositorio, no selecciona ninguna rama en particular antes de configurar y hacer. Esto significa que está creando la master
rama, que es una versión en evolución de OpenSSL 3.0.0. Esta no es una versión compatible según la documentación de la caja . Para crear una versión compatible de OpenSSL, tendrá que cambiar a alguna rama o etiqueta 1.1.1. Alternativamente, puede descargar la versión 1.1.1 desde la página de descarga de OpenSSL .
Dicho esto, no parece necesario instalar OpenSSL desde la fuente. En la sección Automático , la documentación explica que la caja puede hacer frente a todo tipo de instalaciones típicas de OpenSSL. Puede que le resulte más fácil seguir eso, si es posible en su caso. Si es así, debe desarmar la OPENSSL_DIR
variable de entorno; de lo contrario, esto anulará (continuará) los mecanismos automáticos de la caja para encontrar la instalación de OpenSSL.
Si aún desea seguir con la configuración manual , entonces debería usar variables de entorno, y OPENSSL_DIR
parece conveniente. Sin embargo, no significa lo mismo que el openssldir
parámetro que usó en su comando de configuración ./config --openssldir=/usr/local/ssl
. Para obtener los detalles, consulte el significado de ese parámetro de configuración . De hecho, el significado de la caja OPENSSL_DIR
corresponde a la --prefixconfiguración (que no configuró).
El problema con el que se encuentra ahora es que su OPENSSL_DIR
variable apunta a su directorio para los archivos de configuración de OpenSSL, mientras que la caja espera que apunte a la parte superior del árbol de directorio de instalación de OpenSSL real (que en su caso parece residir en /usr/local
)