3

モジュールの機能の1つを変更する必要がある問題の解決策に取り組んでいますgb_trees

編集済みバージョンのコンパイル中にエラーが発生しますgb_trees

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

変更を加えて既存のモジュールをコンパイルする方法は何ですか?

4

1 に答える 1

7

おそらくあなたのファイルは別のプロセスによって使用されています。使用しているすべてのアプリケーションを閉じるか、OSを再起動してから、再コンパイルしてください。

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

ドキュメントから:

Erlangランタイムシステムがあなたを保護しています。

最も簡単な解決策は、モジュールの名前をmysets.erlなどに変更することです。ライブラリモジュールを含むディレクトリを「貼り付け解除」することもできます。

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

また:

Erlangランタイムシステム自体に影響を与えるモジュールを誤ってリロードすることを防ぐために、、kernelおよびstdlibディレクトリ compilerスティッキーと見なされます。これは、ユーザーがそれらのいずれかにあるモジュールをリロードしようとすると、システムが警告を発行し、要求を拒否することを意味します。この機能は、コマンドラインフラグを使用して無効にできます-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を次のような名前に変更してgb_trees_mine、エクスポートする関数を使用することもできます。

1> gb_trees_mine:foo(13,42).
bar
2>
于 2011-02-03T11:19:11.463 に答える