i write nif
library in erlang. write load
, upgrade
, unload
functions.
this code:
#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);
in erlang shell load nif
, run checksum
function , returns 123
, fine!
after change return value of checksum
123456
, compile , load nif
erlang vm using l(mynif)
command.
here problem! if run checksum
function, return value must 123445
still 123
, nif
have not been upgraded.
what problem? search lot , tested examples , libraries jiffy
didn`t work.
try:
code:purge(mynif). code:delete(mynif). l(mynif).