Domanda

Ho seguito le istruzioni Qui, alla lettera.Ho quindi eseguito l'istruzione per creare una struttura di progetto dell'applicazione e ho ricevuto il seguente errore.

$ ./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}]}}

Qualche idea su cosa sto facendo di sbagliato?

È stato utile?

Soluzione

Sembra che il tuo Erlang sia stato compilato senza OpenSSL (il modulo Crypto). Crypto è necessario per molte (la maggior parte?) Erlang applicazioni. Dovrai ottenere una versione di Erlang con un modulo crittografico funzionante, e quindi non dovresti avere problemi come questo.

Altri suggerimenti

Un chiarimento al tuo argomento è la risposta di valida (aggiunta come risposta perché il commento è troppo breve).

Può darsi che Erlang sia stato compilato correttamente, ma le librerie OpenSSL non sono visibili a Erlang, quindi il server crittografico non può essere avviato. Ho compilato Erlang su Solaris 10 e non si è lamentato del fatto che OpenSSL non fosse installato. In effetti, ha compilato cripto e installato in: /usr/local/lib/erlang/lib/crypto-2.2/

Ma l'armatura non funzionava ancora. È facile verificare se il problema è effettivamente con il modulo crittografico.

Apri la shell Erlang e il tipo crypto:start(). Questo stava accadendo sul mio 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'"}}

Se OpenSSL è installato in una posizione non standard, poiché si verifica quando si utilizza OpenCSW per installare OpenSSL su Solaris 10, è facile risolvere il problema aggiungendo il percorso della libreria alla variabile di ambiente. Ad esempio su Solaris 10 a /etc /profilo:

LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/opt/csw/lib
export LD_LIBRARY_PATH

Quindi accedere e accedere o ricaricare l'ambiente bash, ad esempio come questo:

bash-3.2# . /etc/profile

Risultato:

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

Consiglierei di usare Erlang precompilato che è disponibile su Erlang Solutions: https://www.erlang-solutions.com/downloads/download-erlang-otp

Ce n'è uno anche per Windows.

Ottenere questo errore durante l'esecuzione del comando:

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

I dettagli di Erlang sono:

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> 

Sembra che Crypto non funzioni, poiché il comando dà "OK" o "Eccezione Errore".

Aiuto richiesto.

Grazie per la risposta Ivan.Ma sembra che ho capito il problema:Gli aggiornamenti automatici di Ubuntu sono stati disattivati ​​e le dipendenze non sono state installate durante la compilazione di erlang (ad es.libssh-dev).Una volta attivato l'aggiornamento automatico, il comando viene compilato e il comando viene eseguito correttamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top