[erlang-questions] why can not call erl_init() in drivers
Per Hedeland
per@REDACTED
Thu Jul 2 16:29:53 CEST 2009
caox <caox@REDACTED> wrote:
>
> I found the erl_interface lib can not be used when I was working on
>some c-drivers for erlang, since there is no response when calling
>erl_init().
This is probably because there is an erl_init() function in the emulator
itself (in erts/emulator/beam/erl_init.c) that does "something
completely different", and that's the one you end up calling. I happened
to notice that as I wanted to use erl_interface in a driver a while
back, never actually tried calling erl_init() though.:-)
In my case it never was a problem, because in the driver I actually
dynamically loaded a library (i.e. via dlopen()) that was built from
erl_interface and some other stuff, and so while the driver does call
the erl_init() in erl_interface, it does it via the pointer returned by
dlsym(), not a direct call - hence no collision possible (for erl_init()
or any other function that happens to have the same name as one in the
emulator).
There are probably other ways to avoid the issue, e.g. you could have
the 3 lines of code that erl_init() consist of in your driver instead -
or maybe it would work if you link your driver statically with
erl_interface.
--Per
More information about the erlang-questions
mailing list