2011-01-20 3 views
8

J'ai suivi les instructions here, à la lettre. J'ai alors couru l'instruction pour créer une structure de projet d'application, et ai eu l'erreur suivante.rebar: erreur sortie sur create-app: {crypto, start, []}

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

Des idées de ce que je fais mal?

Répondre

11

On dirait que votre Erlang a été compilé sans OpenSSL (le module crypto). crypto est requis pour beaucoup (la plupart?) d'applications Erlang. Vous aurez besoin d'une version d'Erlang avec un module de chiffrement fonctionnel, et vous ne devriez avoir aucun problème comme celui-ci.

+0

ahh. Une installation Windows. Je commence à réaliser qu'Erlang sur Windows est probablement moins agréable que sous Linux. Est-il possible de voir s'il a été construit avec OpenSSH?Ou trouvez une version pré-compilée faite pour Cygwin 1.7+ (qui est ce que j'utilise normalement pour avoir à travailler sur Windows) Je ne vois rien de similaire dans mon ... \ erlang \ erl5.8.1.1 \ erts- 5.8.1.1 \ bin répertoire. –

+2

J'aiderais si je pouvais, mais je n'ai jamais utilisé Erlang sur Windows. –

+1

frappé un homme alors qu'il est en panne, pourquoi ne pas vous! ; ^] –

6

Une clarification à votre réponse ARGUMENT EST VALIDE (en ajoutant comme réponse parce que le commentaire est trop court).

Il se peut qu'Erlang ait été compilé correctement mais que les bibliothèques OpenSSL ne soient pas visibles par Erlang, donc le serveur de chiffrement ne peut pas être démarré. J'ai compilé Erlang sur Solaris 10 et il ne s'est pas plaint que OpenSSL ne soit pas installé. En fait, il a compilé crypto et l'a installé dans: /usr/local/lib/erlang/lib/crypto-2.2/

Mais Rebar ne fonctionnait toujours pas. Il est facile de vérifier si le problème est bien avec le module crypto. Ouvrez le shell Erlang et tapez crypto:start(). Cela se passait sur mon système:

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 installé dans un endroit non standard, comme il est le cas lors de l'utilisation OpenCSW installer OpenSSL sur Solaris 10, il est facile de résoudre le problème en ajoutant la chemin de la bibliothèque vers la variable d'environnement. Par exemple, sur Solaris 10/etc/profile:

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

Ensuite log-out et vous identifier ou re-charger l'environnement bash, par exemple comme ceci:

bash-3.2# . /etc/profile 

Résultat:

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 
1

Obtenir cette erreur lors de l'exécution commande make:

[email protected]:/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 

Les détails Erlang sont:

[email protected]:/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> 

On dirait que Crypto ne fonctionne pas, comme la commande donne "Ok" ou "erreur d'exception".

Besoin d'aide.

+2

Vous avez oublié le "." à la fin de crypto: start(), donc il n'a pas encore été exécuté. – Oscar

0

Merci pour la réponse Ivan. Mais il semble que j'ai trouvé le problème: Les mises à jour automatiques d'ubuntu ont été désactivées et les dépendances n'ont pas été installées lors de la compilation erlang (par exemple libssh-dev). Une fois que la mise à jour automatique a été activée, elle a été compilée et la commande a bien fonctionné.

Questions connexes