Erlang,是否可以在不重新启动外壳的情况下重新加载或升级nif库?

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?

Ste*_*ski 5

如错误消息所示,您需要upgrade在NIF中提供一个函数,该函数是在您对以下调用的调用中指定的ERL_NIF_INIT

ERL_NIF_INIT(MODULE, ErlNifFunc funcs[], load, reload, upgrade, unload)
Run Code Online (Sandbox Code Playgroud)

升级功能记录在erl_nif手册页中