2016-06-07 3 views
0

Я пишу библиотеку nif в erlang. Также я пишу 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); 

В Erlang оболочке я загрузить эту nif и запустить checksum функцию и возвращает 123 и все в порядке!

После этого изменения я возвращаемое значение checksum к 123456 и компилировать и загрузить nif к Эрланга VM, используя команду l(mynif).

В этом проблема! Если я запускаю функцию checksum, возвращаемое значение должно быть 123445, но оно по-прежнему 123 и nif не были обновлены.

В чем проблема? Я много искал и тестировал некоторые примеры и библиотеки вроде jiffy, но не работал.

ответ

1

Try:

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

Вы можете лучше объяснить, как и почему этот фрагмент кода будет использоваться для исправления проблемы OP еще? – NoseKnowsAll