2016-06-07 3 views
0

나는 erlang에 nif 라이브러리를 씁니다. 또한 나는 load, upgradeunload 함수를 씁니다. 얼랑 쉘에서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를 반환하고 모든 것이 괜찮 :

이 내 코드입니다! 123456checksum의 변화 나 리턴 값 후

컴파일하고 l(mynif) 명령을 사용 얼랑 VM에 nif로드.

여기에 문제가 있습니다. checksum 함수를 실행하면 반환 값은 123445이어야하지만 여전히 123nif은 업그레이드되지 않았습니다.

무엇이 문제입니까? 나는 많은 것을 검색하고 jiffy과 같은 라이브러리와 예제를 테스트했지만 그다지 효과가 없었습니다.

답변

1

시도 :

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

더 나은 방법이 코드는 영업 이익의 문제를 해결하기 위해 사용되는 이유를 설명 할 수 있습니까? – NoseKnowsAll