Pergunta

Estou trabalhando na solução de um problema que requer mudanças em uma das funções do módulo gb_trees.

Estou recebendo um erro ao compilar a versão editada de gb_trees:

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

Como posso fazer alterações e compilar um módulo já existente?

Foi útil?

Solução

Provavelmente seu arquivo está sendo usado por outro processo. Feche todos os aplicativos que você está usando ou reinicie o sistema operacional e tente recompilar.

Você está tentando carregar manualmente um módulo, que faz parte do Erlang / OTP.

Da documentação:

O sistema de tempo de execução Erlang é protegendo você.

A solução mais fácil é renomear seu módulo, por exemplo para mysets.erl. Isso é também possível 'desgrudar' o diretório contendo o módulo de biblioteca.

Consulte code:unstick/1 .

Também:

Para evitar recarregar acidentalmente módulos que afetam o tempo de execução Erlang sistema propriamente dito, o kernel, stdlib e diretórios compiler são considerados pegajoso . Isso significa que o sistema emite um aviso e rejeita o solicitação se um usuário tentar recarregar um módulo residente em qualquer um deles. o recurso pode ser desabilitado usando o sinalizador de linha de comando -nostick.

Consulte erl(1) .

Por exemplo:

$ 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>

Você vê que podemos compilar e carregar o módulo na VM.

No entanto, você pode simplesmente renomear seu módulo gb_trees para algo como gb_trees_mine e usar as funções que ele exporta:

1> gb_trees_mine:foo(13,42).
bar
2>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top