0
我在erlang中編寫了一個nif
庫。我還寫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);
二郎殼我加載此nif
和運行checksum
功能,它返回123
,一切都很好!
的checksum
到123456
,我變化返回值後並編譯和使用l(mynif)
命令加載到nif
二郎VM。
這是問題所在!如果我運行checksum
函數,返回值必須是123445
,但它仍然是123
和nif
尚未升級。
什麼問題?我搜索了很多,並測試了一些例子和庫,如jiffy
,但沒有工作。
你能更好地解釋如何以及爲什麼這個代碼片段將被用來修復OP的問題呢? – NoseKnowsAll