Я пишу библиотеку nif
в erlang. Также я пишу load
, upgrade
и unload
функции.Erlang nif не обновляет
Это мой код:
#include "erl_nif.h"
int checksum(char *s)
{
return 123;
}
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
static ERL_NIF_TERM
checksum_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
return enif_make_int(env, checksum(""));
}
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
static int
load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info)
{
*priv_data = enif_open_resource_type(env,
NULL,
"cwm_utils_buf",
NULL,
ERL_NIF_RT_CREATE | ERL_NIF_RT_TAKEOVER,
NULL);
return 0;
}
static int
upgrade(ErlNifEnv* env, void** priv_data, void** old_priv_data, ERL_NIF_TERM load_info)
{
*priv_data = enif_open_resource_type(env,
NULL,
"cwm_utils_buf",
NULL,
ERL_NIF_RT_TAKEOVER,
NULL);
return 0;
}
static void
unload(ErlNifEnv* env, void* priv_data)
{
return ;
}
static ErlNifFunc nif_funcs[] = {
{"checksum", 1, checksum_nif}
};
ERL_NIF_INIT(mynif, nif_funcs, &load, NULL, &upgrade, &unload);
В Erlang оболочке я загрузить эту nif
и запустить checksum
функцию и возвращает 123
и все в порядке!
После этого изменения я возвращаемое значение checksum
к 123456
и компилировать и загрузить nif
к Эрланга VM, используя команду l(mynif)
.
В этом проблема! Если я запускаю функцию checksum
, возвращаемое значение должно быть 123445
, но оно по-прежнему 123
и nif
не были обновлены.
В чем проблема? Я много искал и тестировал некоторые примеры и библиотеки вроде jiffy
, но не работал.
Вы можете лучше объяснить, как и почему этот фрагмент кода будет использоваться для исправления проблемы OP еще? – NoseKnowsAll