Esnafı kendim yazıyorsam, nif kullanabiliyorum, ancak inşaat demiri kullandığım zaman nif işlevleri bulunamıyor. Sanırım, çünkü * .so nesneleri kiriş dosyaları gibi paketlenmiyor. İşte basit bir örnek;erlang rebar escriptize & nifs
rebar.config
:
{deps, [
{'jiffy', "", {git, "https://github.com/davisp/jiffy.git", {branch, master}}}
]}.
{escript_incl_apps, [jiffy]}.
%% I tried this to see what happens if the so got in there but didn't help
{escript_incl_extra, [{"deps/jiffy/priv/jiffy.so", "/path/to/my/proj"}]}.
test.erl
:
-module(test).
-export([main/1]).
main(_Args) ->
jiffy:decode(<<"1">>),
ok.
inşaat demiri escriptize
./test
derlemek get-Deps ve sonuç
escript: exception error: undefined function jiffy:decode/1
in function test:main/1 (src/test.erl, line 7)
in call from escript:run/2 (escript.erl, line 741)
in call from escript:start/1 (escript.erl, line 277)
in call from init:start_it/1
in call from init:start_em/1
olduğunu
Bunun üstesinden gelmenin bir yolu var mı?
Hatadan, '* .so' değil, bulunamayan' jiffy.beam 'gibi görünüyor. Belki 'eskortize' sadece 'ebin' bağımlılıklarını görmezden gelen ışınları hesaba katar 'ebin? –
@ Ed'ka, nif olmayan bir bağımlılık eklerseniz, iyi çalışır. – cashmere
Ama eğer jiffy: decode/1 ile jiffy.so'yu 'priv' kaldırılırsa 'denmeye çalışırsanız,' NIF kitaplığı yüklenemedi' hatası, 'undefined function' değil, –