gpt4 book ai didi

c - Erlang nif不升级

转载 作者:行者123 更新时间:2023-11-30 15:08:06 28 4
gpt4 key购买 nike

我用 erlang 编写了一个 nif 库。我还编写了 loadupgradeunload 函数。

这是我的代码:

#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 shell中,我加载这个nif并运行checksum函数,它返回123,一切都很好!

之后,我将checksum的返回值更改为123456,并使用l(mynif编译并加载nif到erlang vm )命令。

问题来了!如果我运行checksum函数,返回值必须是123445,但它仍然是123并且nif还没有被已升级。

有什么问题吗?我搜索了很多并测试了一些示例和库,例如 jiffy 但没有工作。

最佳答案

尝试:

code:purge(mynif).
code:delete(mynif).
l(mynif).

关于c - Erlang nif不升级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37669145/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com