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
를 반환하고 모든 것이 괜찮 :
이 내 코드입니다! 123456
에 checksum
의 변화 나 리턴 값 후
컴파일하고 l(mynif)
명령을 사용 얼랑 VM에 nif
로드.
여기에 문제가 있습니다. checksum
함수를 실행하면 반환 값은 123445
이어야하지만 여전히 123
및 nif
은 업그레이드되지 않았습니다.
무엇이 문제입니까? 나는 많은 것을 검색하고 jiffy
과 같은 라이브러리와 예제를 테스트했지만 그다지 효과가 없었습니다.
더 나은 방법이 코드는 영업 이익의 문제를 해결하기 위해 사용되는 이유를 설명 할 수 있습니까? – NoseKnowsAll