Rebar: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}]}}
私が間違っていることはありますか?
解決
openSSL(暗号モジュール)なしでエルランがコンパイルされたようです。暗号は、多くの(ほとんど?)erlangアプリケーションに必要です。動作する暗号モジュールを備えたErlangのバージョンを取得する必要があります。そのような問題はないはずです。
他のヒント
あなたの議論の明確化は有効な答えです(コメントが短すぎるため、答えとして追加されます)。
Erlangが適切にコンパイルされたのかもしれませんが、OpenSSLライブラリはErlangには見えないため、Cryptoサーバーを起動できません。 Solaris 10にErlangを編集しましたが、OpenSSLがインストールされていないと不平を言いませんでした。実際、Cryptoをコンパイルし、以下にインストールしました。 /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を使用してSolaris 10にOpenSSLをインストールする場合は、環境変数にライブラリパスを追加することで問題を解決するのが簡単です。たとえば、Solaris 10から /etc /Profile:
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/opt/csw/lib
export LD_LIBRARY_PATH
次に、バッシュ環境をログアウトしてログインまたは再ロードします。たとえば、次のようになります。
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
Erlang Solutionsから入手可能な事前コンパイルされたErlangを使用することをお勧めします。 https://www.erlang-solutions.com/downloads/download-erlang-otp
Windows用のものもあります。
実行時にこのエラーを取得します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>
コマンドが「OK」または「例外エラー」を提供するため、暗号が機能していないようです。
必要なヘルプ。
答えをありがとうIvan。しかし、私は問題を理解したようです:Ubuntuの自動更新はオフになり、Erlang(例えばLibssh-Dev)のコンパイル中に依存関係がインストールされませんでした。自動更新がオンになると、コンパイルされ、コマンドが正常に実行されます。