Арматура: ошибка выхода из create-app: {crypto, start, []} - PullRequest
8 голосов
/ 20 января 2011

Я следовал инструкциям здесь , к письму.Затем я выполнил инструкцию по созданию структуры проекта приложения и получил следующую ошибку:

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

Есть идеи, что я делаю неправильно?

Ответы [ 5 ]

11 голосов
/ 20 января 2011

Похоже, ваш Erlang был скомпилирован без OpenSSL (криптомодуль). шифрование требуется для многих (большинства?) приложений Erlang. Вам нужно будет получить версию Erlang с работающим криптомодулем, и тогда у вас не должно быть таких проблем.

6 голосов
/ 08 февраля 2013

Пояснение к Вашему аргументу является действительным ответом (добавление в качестве ответа, потому что комментарий слишком короткий).

Возможно, Erlang был скомпилирован правильно, но библиотеки OpenSSL не видны Erlang, поэтомуКрипто-сервер не может быть запущен.Я скомпилировал Erlang на Solaris 10, и он не жаловался на то, что OpenSSL не был установлен.Фактически, он скомпилировал криптографию и установил ее в: /usr/local/lib/erlang/lib/crypto-2.2/

Но Rebar все еще не работал.Легко проверить, действительно ли проблема в криптомодуле.

Откройте оболочку Erlang и введите crypto:start().Это происходило в моей системе:

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'"}}

Если OpenSSL установлен в нестандартном месте, как это имеет место при использовании OpenCSW для установки OpenSSL на Solaris 10, эту проблему легко устранить,добавление пути библиотеки к переменной среды.Например, в Solaris 10 для / etc / profile:

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

Затем выйдите и войдите в систему или перезагрузите среду bash, например, так:

bash-3.2# . /etc/profile

Результат:

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 голос
/ 21 апреля 2016

Получение этой ошибки при запуске команды make:

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

Подробности erlang:

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> 

Похоже, что crypto не работает, так как команда выдает исключение "Ok" или "ошибка ".

Требуется помощь.

1 голос
/ 01 ноября 2012

Я бы рекомендовал использовать предварительно скомпилированный Erlang, доступный в Erlang Solutions: https://www.erlang -solutions.com / downloads / download-erlang-otp

Для Windows тоже есть один.

0 голосов
/ 04 мая 2016

Спасибо за ответ Иван.Но, похоже, я понял проблему: автоматические обновления ubuntu были отключены, а зависимости не были установлены во время компиляции erlang (например, libssh-dev).Как только автообновление было включено, оно скомпилировалось и команда make заработала.

...