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. _________________________ Racket Developers list: http://lists.racket-lang.org/dev