2011-02-03 14 views
3

モジュールgb_treesの機能の変更が必要な問題を解決するために取り組んでいます。Erlang/OTP:既存のモジュールへの変更

私はgb_treesの編集されたバージョンをコンパイルエラーを取得しています:

1> c(gb_trees). 
cannot write to .bea# 
... 
2> 

私は変更を行い、既存のモジュールをコンパイルすることができます方法は何ですか?

答えて

7

ファイルが別のプロセスで使用されている可能性があります。使用しているすべてのアプリケーションを終了するか、OSを再起動して再コンパイルしてみてください。

Erlang/OTPの一部であるモジュールを手動でロードしようとしています。ドキュメントから

Erlangのランタイムシステムは、あなたを守る です。

最も簡単な解決策は、お客様の モジュールの名前を変更することです。 mysets.erlに。ライブラリモジュールを含むディレクトリ を「アンスティック」することも可能です。 です。

code:unstick/1を参照してください。また

誤っErlangのランタイム システム自体に影響を与える モジュールをリロード防止するためには、kernelstdlibcompilerディレクトリは スティッキーと考えられています。これは、ユーザーが モジュールをリロードしようとすると、システム が警告を出し、 要求を拒否することを意味します。 機能は、 コマンドラインフラグ-nostickを使用して無効にすることができます。

erl(1)を参照してください。例えば

$ erl -nostick 
Eshell V5.7.3 (abort with ^G) 
1> c(gb_trees). 
{ok,gb_trees} 
2> gb_trees:module_info(). 
[{exports,[{foo,2},{module_info,0},{module_info,1}]}, 
{imports,[]}, 
{attributes,[{vsn,[338095567601101424197378397768992511838]}]}, 
{compile,[{options,[]}, 
      {version,"4.6.3"}, 
      {time,{2011,2,3,11,39,53}}, 
      {source,"/tmp/gb_trees.erl"}]}] 
3> 

あなたは私たちがVMにモジュールをコンパイルしてロードすることができていることがわかります。

あなただけgb_trees_mineのようなものにあなたのモジュールgb_treesの名前を変更し、それがエクスポート機能を使用することができますしかし:

1> gb_trees_mine:foo(13,42). 
bar 
2> 
関連する問題