From: Charles Wilson
>Running 'make gdk-pixbuf.loaders' manually showed a
missing
>symbol/relocation error when trying to load
libpixbufloader-png.so.
>...when libpixbufloader-png.so is dlopened that zlib
dependency is
>dropped, and libz.so is not loaded -- so
gdk-pixbuf-query-loaders
>gets that missing symbol error for
libpixbufloader-png.so.
Right, prior to 1.2.9 anything attempting a *direct* dlopen
of
libpng12 without first doing a dlopen of zlib would fail.
IMO this
was clearly wrong, but I doubt whether anything ever did a
direct
dlopen("libpng12.so")
It's not so clear that the behaviour in this case is wrong
though,
the rules for linking a DLL against libpng are the same as
those
for linking an application - all the dependencies must be
satisfied
somehow. The fact that the link of libpixbufloader-png.so
succeeds
is, at best, a misfeature of the linker/build system.
The arguments for *not* including -lz in the libpng .so link
are just
as good now as they were before, but it doesn't much matter
because
the 1.2.9 and 1.2.10 releases both do include -lz when
linking the
shared library.
>"deep linking" like this is bad:
>http://lists.debian.org/debian-devel-announce
/2005/11/msg00016.html
>which is why the png folks have had a long policy
against including
>-lz in their pkg-config --libs output (.pc file).
Which means it won't work with static linking.
libpng-config, on the
other hand, includes -lz when called with --static.
>However, it seems that on some platforms (Solaris, HP?,
to judge by
>the error reports) the runtime loader works differently
when
>implicitly loading a shared library at application
startup, than when
>loading it via dlopen(). In the former case, the
lower-level dependency
>gets loaded even tho the app did not link directly
against it.
I guess that's a theoretical possibility, but so far as I
am aware
an attempt to link an application against a DLL with
unresolved
symbol references fails (e.g. -lpng12 without -lz prior to
1.2.8).
If it doesn't fail the result is unpredictable - somehow
the linker
must find the DLL containing the unresolved symbols, without
knowing
the name of the DLL...
John Bowler <jbowler acm.org>
-------------------------------------------------------
All the advantages of Linux Managed Hosting--Without the
Cost and Risk!
Fully trained technicians. The highest number of Red Hat
certifications in
the hosting industry. Fanatical Support. Click to learn more
http://sel.as-us.falkag.net/
sel?cmd=lnk&kid=107521&bid=248729&dat=121642
_______________________________________________
png-mng-implement mailing list
png-mng-implement lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/png-m
ng-implement
|