[racket-dev] Strange error with gui and ffi
At Thu, 19 Jan 2012 15:40:07 +0100, Tobias Hammer wrote:
> > Even if libVLCore is statically linked to a libjpeg, I think it could
> > interact with dynamic loading of another libjpeg, depending on the
> > platform and linking options.
>
> I digged a bit more and found the following line the rackets libffi:
> handle = dlopen(name, RTLD_NOW | RTLD_GLOBAL);
> If i interpret the manpages correct that means that all symbols from the
> lib are loaded and used to resolve references. That may be convenient
> for the libraries that the racket core uses but may lead strange
> behavior like the one i got whenever name clashes happen.
>
> Maybe it would be a good idea to make this import all behavior optional.
I agree that RTLD_GLOBAL should be removed by default,
but it should be made available as an option. Meanwhile, the details of
`(ffi-lib #f)' will have to change for backward compatibility.
As far as I can tell or remember, RTLD_GLOBAL is mostly there to make
`(ffi-lib #f)' work, where the handle produced by `(ffi-lib #f)' finds
an export in any previously loaded library.
Since Racket keeps a table of all loaded libraries, maybe the right
change is to implement `(ffi-lib #f)' by traversing the table in
addition to using a global lookup, which means that `(ffi-lib #f)' can
work without always loading libraries with RTLD_GLOBAL. Meanwhile,
RTLD_GLOBAL could be optional behavior, as you suggest.