2016-06-07 75 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,一切都很好!

checksum123456,我變化返回值後並編譯和使用l(mynif)命令加載到nif二郎VM。

這是問題所在!如果我運行checksum函數,返回值必須是123445,但它仍然是123nif尚未升級。

什麼問題?我搜索了很多,並測試了一些例子和庫,如jiffy,但沒有工作。

回答

1

嘗試:

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

你能更好地解釋如何以及爲什麼這個代碼片段將被用來修復OP的問題呢? – NoseKnowsAll