[GRASS5] CVS version of grass5 failing to compile nviz & r.in.gdal because of -ldl flag
Glynn Clements
glynn.clements at virgin.net
Mon Nov 18 23:53:26 EST 2002
Scott W Mitchell wrote:
> Just tried to compile today's CVS version of GRASS5 (is CVS HEAD the
> right terminology if I've just checked out / updated the grass
> directory without specifying any tags?) so I could get the "history
> with r.mapcalc" working. I've posted separately about the fact that
> r.mapcalc itself won't compile on my Linux box.
>
> But here on my Darwin/MacOS X machine, everything apparently compiled
> (including r.mapcalc, and it's recording the formulae used now - yay !
> Thanks, Glynn !) except for r.in.gdal and NVIZ 2.2.
>
> Digging deeper, the error was the same in both cases - when it tries to
> link everything together there's a lib flag for the DL library (-ldl)
> and libdl isn't found. IF I understand correctly (and that's a big
> if), libopen() etc are provided by dlcompat in this OS so there is no
> such DL library.
>
> So... I tracked down the -ldl call to the head file, and just made the
> DLLIB variable empty in my copy of head.powerpc-apple-darwin6.1 - and
> then tried to compile NVIZ and it does so without an error.
>
> Is that the appropriate fix ? NVIZ seems to be working now, anyways.
>
> For some reason, taking the DLLIB definition away doesn't stop the
> compile for r.in.gdal from trying to load libdl so I still have that
> error, but will keep digging for it...
1. The use of $(DLLIB) by NVIZ is gratuitous; the NVWISH2.2 binary
doesn't directly call dlopen() etc.
It's possible that one of the libraries against which NVIZ is linked
may require libdl on some platforms; however, that should be handled
by configure when detecting the library in question (libtcl and libGL
are both candidates; configure *does* check for $DLLIB when checking
libtcl).
2. r.in.gdal *does* use dlopen() unless you use the --with-gdal
configure switch. However, this is handled by configure, which adds
$DLLIB to GDAL_LIBS where appropriate (i.e. when you aren't using
--with-gdal).
3. However, neither of the above should really matter, because DLLIB
should be empty unless configure actually finds dlsym() in libdl.
Specifically, configure:
a) checks whether dlsym() is available without any additional
switches; if it is, then DLLIB is set to empty.
b) otherwise, it checks whether dlsym() is available when linking
against the "dl" library (i.e. with "-ldl"); if it is, then DLLIB is
set to "-ldl".
c) otherwise, DLLIB is set to empty.
The resulting value of DLLIB is used in the rest of the configure
script, and is substituted when converting src/CMD/head/head.in into
src/CMD/head/head (which is later renamed to e.g.
src/CMD/head/head.powerpc-apple-darwin6.1).
So, I'm curious as to why configure decided to set DLLIB to "-ldl" if
you don't have a library with that name.
--
Glynn Clements <glynn.clements at virgin.net>
More information about the grass-dev
mailing list