macos rust rust-cargo

macos - La compilación de OpenSSL falla al compilar en Mac OS X 10.11



rust rust-cargo (4)

A partir de la versión 0.8 de rust-openssl, la biblioteca detectará automáticamente las bibliotecas OpenSSL instaladas por Homebrew, no es necesario establecer variables de entorno adicionales.

Si necesita admitir una versión anterior o elegir no usar Homebrew, siga leyendo.

Este es un problema conocido (también this y this ), pero no uno que la caja pueda solucionar.

La solución rápida es instalar OpenSSL con Homebrew y luego señalar explícitamente los directorios donde se encuentra OpenSSL configurando las variables de entorno OPENSSL_INCLUDE_DIR y OPENSSL_LIB_DIR :

OPENSSL_INCLUDE_DIR=/usr/local/Cellar/openssl/1.0.2e/include / OPENSSL_LIB_DIR=/usr/local/Cellar/openssl/1.0.2e/lib / cargo build

Si ya ha realizado una cargo build , primero deberá ejecutar la cargo clean para borrar nuestra información en caché obsoleta.

Si no desea configurar esto para cada shell que abra, agréguelo a sus archivos de inicialización de shell (como ~/.bash_profile ). Puede hacerlo un poco menos frágil si no codifica el número de versión:

export OPENSSL_INCLUDE_DIR=$(brew --prefix openssl)/include export OPENSSL_LIB_DIR=$(brew --prefix openssl)/lib

Si no desea utilizar Homebrew, siga el mismo proceso pero utilizando la ruta adecuada a su copia de OpenSSL.

La razón más larga está bien descrita por andrewtj :

OpenSSL no tiene un ABI estable, por lo que, por motivos de compatibilidad, Apple ha mantenido una bifurcación que es compatible con uno de los ABI anteriores. Desaprobaron OpenSSL en 10.7 y finalmente eliminaron los encabezados en 10.11 para impulsar a los desarrolladores de aplicaciones OS X a agrupar sus propios OpenSSL o usar sus marcos. Los dylibs se han dejado para que las aplicaciones que no se hayan actualizado no se rompan. Todavía puede vincularse contra ellos, pero se está abriendo a problemas de compatibilidad extraños al hacerlo (a menos que tome los encabezados de una versión anterior de OS X).

Traté de instalar el framework Iron para Rust en Mac OS X 10.11.2, pero falló cuando ejecuté la cargo build cargo run o cargo run al compilar las cosas de openssl :

failed to run custom build command for `openssl-sys-extras v0.7.4` Process didn''t exit successfully: `/xxx/rust/hello/target/debug/build/openssl-sys-extras-413d6c73b37a590d/build-script-build` (exit code: 101) --- stdout TARGET = Some("x86_64-apple-darwin") OPT_LEVEL = Some("0") PROFILE = Some("debug") TARGET = Some("x86_64-apple-darwin") debug=true opt-level=0 HOST = Some("x86_64-apple-darwin") TARGET = Some("x86_64-apple-darwin") TARGET = Some("x86_64-apple-darwin") HOST = Some("x86_64-apple-darwin") CC_x86_64-apple-darwin = None CC_x86_64_apple_darwin = None HOST_CC = None CC = None HOST = Some("x86_64-apple-darwin") TARGET = Some("x86_64-apple-darwin") HOST = Some("x86_64-apple-darwin") CFLAGS_x86_64-apple-darwin = None CFLAGS_x86_64_apple_darwin = None HOST_CFLAGS = None CFLAGS = None running: "cc" "-O0" "-ffunction-sections" "-fdata-sections" "-g" "-m64" "-fPIC" "-o" "/xxx/rust/hello/target/debug/build/openssl-sys-extras-413d6c73b37a590d/out/src/openssl_shim.o" "-c" "src/openssl_shim.c" ExitStatus(Code(1)) command did not execute successfully, got: exit code: 1 --- stderr src/openssl_shim.c:1:10: fatal error: ''openssl/hmac.h'' file not found #include <openssl/hmac.h> ^ 1 error generated. thread ''<main>'' panicked at ''explicit panic'', /xxx/.cargo/registry/src/github.com-0a35038f75765ae4/gcc-0.3.21/src/lib.rs:772

openssl versión de openssl parece estar bien:

$ openssl version OpenSSL 0.9.8zg 14 July 2015

No sé qué tengo que hacer para que esta instalación funcione y pruebe Iron.


Con Brew use así:

brew install openssl export OPENSSL_INCLUDE_DIR=`brew --prefix openssl`/include export OPENSSL_LIB_DIR=`brew --prefix openssl`/lib cargo clean cargo build


La respuesta de https://.com/a/39380733/1317564 para MacPorts:

sudo port install openssl export OPENSSL_INCLUDE_DIR=/opt/local/include export OPENSSL_LIB_DIR=/opt/local/lib cargo clean cargo build


Si tiene instalado openssl de homebrew, simplemente agregue lo siguiente a su Cargo.toml:

[target.x86_64-apple-darwin.openssl-sys] rustc-link-search = [ "/usr/local/opt/openssl/lib" ] rustc-link-lib = [ "ssl", "crypto" ] include = [ "/usr/local/opt/openssl/include" ]

y luego cargo clean && cargo build . Sin romper OS X introduciendo un openssl incompatible en las rutas de carga de la biblioteca, y sin olvidar establecer / desarmar variables de entorno cuando desee compilar (o contaminar su entorno de shell cuando no esté trabajando en material Rust). En general, un enfoque mucho más feliz y menos exasperante.

No puedo agregar esta respuesta a mi propia pregunta donde pertenece (porque depende de homebrew), porque decidió que debería cerrarse, pero responderé aquí y vincularé a esa pregunta.