erlang - tuberias - salidas estandar en linux
barras de refuerzo: salida de error en la aplicación de creación:{crypto, start,[]} (5)
Parece que tu Erlang fue compilado sin OpenSSL (el módulo de cifrado). crypto es necesario para muchas (¿la mayoría?) aplicaciones de Erlang. Necesitarás obtener una versión de Erlang con un módulo de cifrado en funcionamiento, y entonces no deberías tener ningún problema como este.
Seguí las instrucciones aquí , al pie de la letra. Luego ejecuté las instrucciones para crear una estructura de proyecto de aplicación y obtuve el siguiente error.
$ ./rebar create-app appid=myapp
Uncaught error in rebar_core: {''EXIT'',
{undef,
[{crypto,start,[]},
{rebar_core,run,1},
{rebar,main,1},
{escript,run,2},
{escript,start,1},
{init,start_it,1},
{init,start_em,1}]}}
¿Alguna idea de lo que estoy haciendo mal?
Recomiendo usar Erlang precompilado que está disponible en Erlang Solutions: https://www.erlang-solutions.com/downloads/download-erlang-otp
También hay uno para Windows.
Una aclaración a SU ARGUMENTO ES LA RESPUESTA VÁLIDA (agregando como respuesta porque el comentario es demasiado corto).
Es posible que Erlang se haya compilado correctamente, pero las bibliotecas OpenSSL no son visibles para Erlang, por lo que no se puede iniciar el servidor de cifrado. Recopilé Erlang en Solaris 10 y no me quejé de que OpenSSL no se instalara. De hecho, compiló crypto y lo instaló en: /usr/local/lib/erlang/lib/crypto-2.2/
Pero Rebar todavía no estaba funcionando. Es fácil verificar si el problema es realmente con el módulo criptográfico.
Abra el shell de Erlang y escriba crypto:start()
. Esto estaba sucediendo en mi sistema:
bash-3.2# erl
Erlang R15B03 (erts-5.9.3.1) [source] [smp:2:2] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.9.3.1 (abort with ^G)
1> crypto:start().
** exception error: undefined function crypto:start/0
2>
=ERROR REPORT==== 8-Feb-2013::15:28:43 ===
Unable to load crypto library. Failed with error:
"load_failed, Failed to load NIF library: ''ld.so.1: beam.smp: fatal: relocation error: file /usr/local/lib/erlang/lib/crypto-2.2/priv/lib/crypto.so: symbol DES_ede3_cfb_encrypt: referenced symbol not found''"
OpenSSL might not be installed on this system.
=ERROR REPORT==== 8-Feb-2013::15:28:43 ===
The on_load function for module crypto returned {error,
{load_failed,
"Failed to load NIF library: ''ld.so.1: beam.smp: fatal: relocation error: file /usr/local/lib/erlang/lib/crypto-2.2/priv/lib/crypto.so: symbol DES_ede3_cfb_encrypt: referenced symbol not found''"}}
Si OpenSSL está instalado en una ubicación no estándar, como ocurre cuando se utiliza OpenCSW para instalar OpenSSL en Solaris 10, es fácil solucionar el problema añadiendo la ruta de la biblioteca a la variable de entorno. Por ejemplo en Solaris 10 a / etc / profile:
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/opt/csw/lib
export LD_LIBRARY_PATH
Luego cierre la sesión e inicie sesión o vuelva a cargar el entorno bash, por ejemplo, de esta manera:
bash-3.2# . /etc/profile
Resultado:
bash-3.2# erl
Erlang R15B03 (erts-5.9.3.1) [source] [smp:2:2] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.9.3.1 (abort with ^G)
1> crypto:start().
ok
Obteniendo este error al ejecutar make command:
root@hs:/var/www/html/ejabberd-master# make
rm -rf deps/.got
rm -rf deps/.built
/usr/local/lib/erlang/bin/escript rebar get-deps && :> deps/.got
Uncaught error in rebar_core: {''EXIT'',
{undef,
[{crypto,start,[],[]},
{rebar,run_aux,2,
[{file,"src/rebar.erl"},{line,163}]},
{rebar,main,1,
[{file,"src/rebar.erl"},{line,58}]},
{escript,run,2,
[{file,"escript.erl"},{line,757}]},
{escript,start,1,
[{file,"escript.erl"},{line,277}]},
{init,start_it,1,[]},
{init,start_em,1,[]}]}}
make: *** [deps/.got] Error 1
Los detalles de erlang son:
root@hs:/home/node# erl
Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:4:4] [async- threads:10] [hipe] [kernel-poll:false]
Eshell V7.0 (abort with ^G)
1> crypto:start()
1>
Parece que crypto no funciona, ya que el comando da "Ok" o "error de excepción".
Se necesita ayuda.
Gracias por la respuesta Ivan. Pero parece que descubrí el problema: las actualizaciones automáticas de ubuntu se desactivaron y las dependencias no se instalaron al compilar erlang (por ejemplo, libssh-dev). Una vez que se activó la actualización automática, se compiló y el comando ejecutar funcionó bien.