El paquete OpenSSL no comstack en Mac OS X 10.11

Intenté instalar el marco de trabajo de Iron para Rust en Mac OS X 10.11.2, pero no funcionó cuando ejecuté la cargo build o la cargo run en la comstackción de 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  ^ 1 error generated. thread '' 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é lo que tengo que hacer para que funcione esta instalación y darle una oportunidad a Iron.

A partir de la versión 0.8 de rust-openssl, las bibliotecas OpenSSL instaladas en Homebrew serán automáticamente detectadas por la caja, no hay necesidad de establecer variables de entorno adicionales.

Si necesita admitir una versión anterior o decide no utilizar Homebrew, siga leyendo.


Este es un problema conocido (también esto y esto ), pero no uno que la caja puede arreglar.

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á cargo clean para borrar nuestra información en caché.

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 para fines de compatibilidad, Apple ha mantenido un fork 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 frameworks. Los dylibs se han dejado para que las aplicaciones que no se actualizaron no se rompan. Todavía puede vincularse contra ellos, pero se está abriendo a problemas de compatibilidad extra al hacerlo (a menos que agarre los encabezados de una versión anterior de OS X).

Con Brew usa así:

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

Si tiene openssl de homebrew instalado, solo agregue lo siguiente a 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 . No se rompe OS X al introducir un openssl incompatible en las rutas de carga de la biblioteca, y sin olvidar establecer / deshacer las variables de entorno cuando se quiere construir (o contaminar el env de su shell cuando no se trabaja con Rust). En general, un enfoque mucho más feliz y menos exasperante.

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

https://stackoverflow.com/a/39380733/1317564's answer for MacPorts:

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