Ich schreibe eine nif
Bibliothek in Erlang. Auch schreibe ich load
, upgrade
und unload
Funktionen.Erlang nif nicht Upgrades
Dies ist mein 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 ich diese nif
laden und checksum
Funktion laufen und es gibt 123
und alles ist in Ordnung!
Danach habe ich Änderung Rückgabewert von checksum
zu 123456
und kompilieren und die nif
zu erlang vm laden l(mynif)
Befehl.
Hier ist das Problem! Wenn ich checksum
Funktion ausführen, muss der Rückgabewert 123445
sein, aber es ist immer noch 123
und nif
wurden nicht aktualisiert.
Was ist das Problem? Ich suche viel und teste einige Beispiele und Bibliotheken wie jiffy
, aber hat nicht funktioniert.
Können Sie besser erklären, wie und warum dieser Code-Schnipsel verwendet würde OP das Problem zu beheben? – NoseKnowsAll