[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