posso usare di NIF se scrivo l'Escript me stesso, però quando uso tondo per cemento armato escriptize le funzioni NIF non può essere trovato. Penso che sia perché gli oggetti * .so non vengono impacchettati come file di travi. Ecco un semplice esempio;erlang tondo per cemento armato escriptize & NIF
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.
tondo per cemento armato get-deps compilare escriptize
./test
e il risultato è
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
Esiste un modo per superare questo?
Da l'errore sembra che è 'jiffy.beam' che non può essere trovato, non' * .so'. Forse 'escriptize' prende in considerazione solo i raggi di' ebin' che ignorano le dipendenze ''ebin's? –
@ Ed'ka, no se aggiungi una dipendenza che non è un nif, funziona perfettamente. – cashmere
Ma se provate a chiamare 'jiffy: decode/1' con' jiffy.so' rimosso da 'priv' dovreste ottenere l'errore' Impossibile caricare la libreria NIF', non 'funzione indefinita' –