[GRASS5] PNG driver: libgd2 pickup problem
Glynn Clements
glynn.clements at virgin.net
Tue Apr 23 07:29:52 EDT 2002
Markus Neteler wrote:
> browsing the archive I found a bit of help to compile the PNG
> driver against libgd2.x. But when I use it, it picks up
> the libgd1.8...
>
> d.mon PNG
> PNG: GRASS_TRUECOLOR status: TRUE
> /mpa_sw/ssi/BIO/software/GRASS5.0.0/grass5bin_cvs/grass5/driver/PNG:
> relocation error: /mpa_sw/ssi/BIO/software/GRASS5.0.0/grass5bin_cvs/grass5/driver/PNG:
> undefined symbol: gdImageCreateTrueColor
> No socket to connect to for monitor <PNG>.
> Problem selecting PNG. Will try once more
> No socket to connect to for monitor <PNG>.
>
> nm /usr/local/lib/libgd.so.2.0.0 |grep gdImageCreateTrueColor
> 00004a18 T gdImageCreateTrueColor
>
> This indicates, that libgd1.8 is used, but the driver compiled against
> 2.x. Any suggestions to solve this run-time problem?
>
> ldd /mpa_sw/ssi/BIO/software/GRASS5.0.0/grass5bin_cvs/grass5/driver/PNG
> libgd.so => /usr/lib/libgd.so (0x40017000)
> libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x4004a000)
> libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x40080000)
> libpng.so.2 => /usr/lib/libpng.so.2 (0x4009f000)
> libm.so.6 => /lib/libm.so.6 (0x400d6000)
> libc.so.6 => /lib/libc.so.6 (0x400f8000)
> libttf.so.2 => /usr/lib/libttf.so.2 (0x4022d000)
> libz.so.1 => /usr/lib/libz.so.1 (0x40257000)
> /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Re-compile libgd 2.x to include an explicit soname. In the gd
Makefile, change:
ld -shared -o libgd.so.${VERSION} ${LIBOBJS}
to:
ld -shared -soname libgd.so.2 -o libgd.so.${VERSION} ${LIBOBJS}
Then, "ldd" will report e.g.:
libgd.so.2 => /usr/local/lib/libgd.so.2 (0x4001c000)
and the loader will try to use libgd.so.2 in preference to libgd.so.
Also, you may be able to work around the problem by setting
LD_LIBRARY_PATH, but that may be undesirable (it will affect all
libraries, not just gd). Alternatively, you could put a link to
libgd.so into $GISBASE/lib, as the GRASS startup adds that directory
to LD_LIBRARY_PATH.
Note: at present, the GRASS shared libraries don't include explicit
sonames. That should be changed if we intend to release a binary
distribution using shared libraries, to prevent this sort of problem.
--
Glynn Clements <glynn.clements at virgin.net>
More information about the grass-dev
mailing list