[erlang-questions] Linking enif_* functions to an executable file

Michael Santos <>
Sat Apr 26 17:05:07 CEST 2014


On Sat, Apr 26, 2014 at 11:38:33PM +0900, mayamatakeshi wrote:
> Hello,
> I am having trouble to debug a NIF library that I wrote (and somehow I
> cannot make gcc to stop when a crash happens in it).

Might be simpler to use gdb:

http://blog.dizzyd.com/blog/2009/12/18/running-erl-in-a-debugger/

There is also the cerl script in the otp source which will run beam
under gdb.

> So I would like to test the NIF in an executable like this:
> 
> static ERL_NIF_TERM nif_myfunc(ErlNifEnv *env, int argc, const ERL_NIF_TERM
> argv[]) {
>     ... do something with enif and native functions ...
> }
> 
> void main() {
>     ErlNifEnv *env = enif_alloc_env();
>     nif_myfunc(env, 0, 0);
> }
> 
> But it seems enif_alloc_env is not present in any lib*.a or *.so that gets
> generated when I build erlang.
> I tried to link to the beam (renamed as libbeam.a)) but i got the linker to
> segfault. So I might need to extract these definitions or extract them from
> the beam source code and add it to my app, but it looks too much trouble.
> 
> So, is there a simple way I can do this?
> 
> Regards,
> Takeshi

> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions




More information about the erlang-questions mailing list