Ami*_*min 5 c erlang erlang-nif
我有一个nif库,每次重新编译它时,都必须重新启动外壳程序才能重新加载或升级该库。
这是我的erlang代码:
-module(q4).
-export([init/0]).
-on_load(init/0).
init() ->
erlang:load_nif("./q4_nif", reload).
Run Code Online (Sandbox Code Playgroud)
每次我编译erlang模块时,都会发生此错误:
`The on_load function for module q4 returned {error,
{upgrade,
"Upgrade not supported by this NIF library."}}`
Run Code Online (Sandbox Code Playgroud)
当我调用init/0函数时,会发生此错误:
{error,{reload,"Reload not supported by this NIF library."}}
无论如何,有没有解决此问题并加载新的nif库,而无需重新启动Shell?
如错误消息所示,您需要upgrade在NIF中提供一个函数,该函数是在您对以下调用的调用中指定的ERL_NIF_INIT:
ERL_NIF_INIT(MODULE, ErlNifFunc funcs[], load, reload, upgrade, unload)
Run Code Online (Sandbox Code Playgroud)
升级功能记录在erl_nif手册页中。