[racket-dev] Strange error with gui and ffi
Am 01/19/2012 02:02 PM, schrieb Matthew Flatt:
> At Thu, 19 Jan 2012 13:30:40 +0100, Tobias Hammer wrote:
>> i am getting a strange error message from racket if i use racket/gui in
>> the main module and only racket in a required one. If i load another
>> shared lib in the required module i get the following output:
>>
>> jpeg: unsupported library version: "unknown"
>
> It does seem that loading libVLCore interferes with the use of libjpeg;
> if you use `racket/gui' in "guibug_req.rkt", that would avoid the
> problem by initializing the libjpeg use in `racket/draw' (via
> `racket/gui') before libVLCore is loaded.
Sure, that would be a possibility.
>
> Can you say more about the platform, libVLCore's linking, and the
> libjpeg that libVLCore uses?
>
Platform is Suse linux i386.
The jpeg lib is IJG (http://www.ijg.org) release 6b from 1998. So it's
pretty old and may be incompatible to the current version. But i can't
replace it because the readme says it may be modified.
The linking is this libjpeg as normal static lib (.a) and the libVLCore
as regular shared lib that includes the static lib.
> 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.
Tobias