I have a nif library and every time i recompile it, I must restart the shell to reload or upgrade this library.
Here is my erlang code:
-module(q4).
-export([init/0]).
-on_load(init/0).
init() ->
erlang:load_nif("./q4_nif", reload).
Every time i compile the erlang module, this error occurs:
`The on_load function for module q4 returned {error,
{upgrade,
"Upgrade not supported by this NIF library."}}`
and when i call init/0
function, this error occurs:
{error,{reload,"Reload not supported by this NIF library."}}
Is there anyway to fix this problem and load new nif library without restarting the shell?
As the error message indicates, you need to provide an upgrade
function in your NIF, which you specify in your call to ERL_NIF_INIT
:
ERL_NIF_INIT(MODULE, ErlNifFunc funcs[], load, reload, upgrade, unload)
The upgrade function is documented in the erl_nif
man page.