[GRASS5] CVS version of grass5 failing to compile nviz & r.in.gdal because of -ldl flag

Scott W Mitchell smitch at eos.geog.utoronto.ca
Tue Nov 19 12:23:46 EST 2002


A slight update, since it looks like it may explain what's happening;   
a random brain electron just fired, and I tried changing -ldl to -ldl.0  
(i.e. added a "zero" version number since I have /sw/lib/libdl.0.dylib  
in my system) in a call to gcc, and it compiled the output file despite  
some TclTk symbol warnings.  So I'm not sure what this means in terms  
of a portable solution as opposed to Darwin weirdness, but it gets  
around the error without taking away the DLLIB definition...

[fats:GMSL/NVIZ2.2/src] smitch% gcc -o nvwish  
OBJ.powerpc-apple-darwin6.1/nvizAppInit.o  
OBJ.powerpc-apple-darwin6.1/change_view.o  
OBJ.powerpc-apple-darwin6.1/draw.o OBJ.powerpc-apple-darwin6.1/exag.o  
OBJ.powerpc-apple-darwin6.1/glwrappers.o  
OBJ.powerpc-apple-darwin6.1/init_commands.o  
OBJ.powerpc-apple-darwin6.1/lights.o  
OBJ.powerpc-apple-darwin6.1/map_obj.o  
OBJ.powerpc-apple-darwin6.1/misc.o  
OBJ.powerpc-apple-darwin6.1/nviz_init.o  
OBJ.powerpc-apple-darwin6.1/position.o  
OBJ.powerpc-apple-darwin6.1/quick_draw.o  
OBJ.powerpc-apple-darwin6.1/anim_support.o  
OBJ.powerpc-apple-darwin6.1/cutplane_obj.o  
OBJ.powerpc-apple-darwin6.1/script_support.o  
OBJ.powerpc-apple-darwin6.1/do_zoom.o  
OBJ.powerpc-apple-darwin6.1/label.o  
OBJ.powerpc-apple-darwin6.1/nvizMain.o  
OBJ.powerpc-apple-darwin6.1/togl.o  
OBJ.powerpc-apple-darwin6.1/togl_cb.o  
OBJ.powerpc-apple-darwin6.1/query_postgr.o  
OBJ.powerpc-apple-darwin6.1/openvect.o  
OBJ.powerpc-apple-darwin6.1/getCat.o  
OBJ.powerpc-apple-darwin6.1/buildInfxQry.o  
OBJ.powerpc-apple-darwin6.1/runInfxQry.o  
/Volumes/newData/smitchHome/src/grass/src/libes/ogsf/LIB.powerpc-apple- 
darwin6.1/libgsf.a  
/Volumes/newData/smitchHome/src/grass/src/libes/libimage/LIB.powerpc- 
apple-darwin6.1/libimage.a  
-L/Volumes/newData/smitchHome/src/grass/src/libes/LIB.powerpc-apple- 
darwin6.1 -L/sw/lib -lbitmap -llinkm -lvect -ldig2 -lgis -lz -ldatetime  
-ltk -L/usr/X11R6/lib -lSM -lICE -lX11 -ltcl -L/usr/X11R6/lib -lGLU  
-L/usr/X11R6/lib -lGL -lSM -lICE -lX11 -lXmu -lXext -ldl.0 -lz  
-L/usr/X11R6/lib -ltiff -lSM -lICE -lX11
ld: warning multiple definitions of symbol _dataKey
/sw/lib/libtk.dylib(tkMain.o) definition of _dataKey
/sw/lib/libtcl.dylib(tclMain.o) definition of _dataKey
[fats:GMSL/NVIZ2.2/src] smitch% ls -l nvwish
-rwxr-xr-x  1 smitch  unknown  1781440 Nov 19 12:20 nvwish
[fats:GMSL/NVIZ2.2/src] smitch% date
Tue Nov 19 12:20:23 EST 2002

On Tuesday, November 19, 2002, at 12:12 PM, Scott W Mitchell wrote:

> I'm sorry, I didn't search for all the possibilities when I concluded  
> that libdl was not on my system.  Turns out there's a libdl.0.dylib in  
> /sw/lib, which is where the fink packaging system puts things under  
> Mac OS.  Not sure how I managed to miss that, must have been dumb  
> mistake.
>
> Sure enough, configure found it:
>
> configure:4491: checking for dlsym in -ldl
> configure:4508: gcc -o conftest -g -O2    -I/sw/include   -L/sw/lib  
> conftest.c -
> ldl   1>&5
> configure:4535: checking for iconv
> ...
>
>
> So, then the question is why the nviz compile can't find it:
>
> /Volumes/newData/smitchHome/src/grass/src.contrib/GMSL/NVIZ2.2/src
>   make -f OBJ.powerpc-apple-darwin6.1/make.rules
>
> gcc  
> -L/Volumes/newData/smitchHome/src/grass/src/libes/LIB.powerpc-apple- 
> darwin6.1 -L/sw/lib -o nvwish  
> OBJ.powerpc-apple-darwin6.1/nvizAppInit.o  
> OBJ.powerpc-apple-darwin6.1/change_view.o  
> OBJ.powerpc-apple-darwin6.1/draw.o OBJ.powerpc-apple-darwin6.1/exag.o  
> OBJ.powerpc-apple-darwin6.1/glwrappers.o  
> OBJ.powerpc-apple-darwin6.1/init_commands.o  
> OBJ.powerpc-apple-darwin6.1/lights.o  
> OBJ.powerpc-apple-darwin6.1/map_obj.o  
> OBJ.powerpc-apple-darwin6.1/misc.o  
> OBJ.powerpc-apple-darwin6.1/nviz_init.o  
> OBJ.powerpc-apple-darwin6.1/position.o  
> OBJ.powerpc-apple-darwin6.1/quick_draw.o  
> OBJ.powerpc-apple-darwin6.1/anim_support.o  
> OBJ.powerpc-apple-darwin6.1/cutplane_obj.o  
> OBJ.powerpc-apple-darwin6.1/script_support.o  
> OBJ.powerpc-apple-darwin6.1/do_zoom.o  
> OBJ.powerpc-apple-darwin6.1/label.o  
> OBJ.powerpc-apple-darwin6.1/nvizMain.o  
> OBJ.powerpc-apple-darwin6.1/togl.o  
> OBJ.powerpc-apple-darwin6.1/togl_cb.o  
> OBJ.powerpc-apple-darwin6.1/query_postgr.o  
> OBJ.powerpc-apple-darwin6.1/openvect.o  
> OBJ.powerpc-apple-darwin6.1/getCat.o  
> OBJ.powerpc-apple-darwin6.1/buildInfxQry.o  
> OBJ.powerpc-apple-darwin6.1/runInfxQry.o  
> /Volumes/newData/smitchHome/src/grass/src/libes/ogsf/LIB.powerpc- 
> apple-darwin6.1/libgsf.a  
> /Volumes/newData/smitchHome/src/grass/src/libes/libimage/LIB.powerpc- 
> apple-darwin6.1/libimage.a \
> -lbitmap -llinkm -lvect -ldig2 \
> -lgis  -lz   \
> -ldatetime   -ltk   -L/usr/X11R6/lib  -lSM -lICE -lX11   -ltcl   
> -L/usr/X11R6/lib  -lGLU  -L/usr/X11R6/lib  -lGL   -lSM -lICE -lX11  
> -lXmu -lXext  -ldl -lz    -L/usr/X11R6/lib    -ltiff  -lSM -lICE -lX11
> ld: can't locate file for: -ldl
> make[1]: *** [nvwish] Error 1
> make: *** [nvwish] Error 2
>
>
> I guess it has to do with Darwin peculiarities re: shared libs, but we  
> just hit the walls of my understanding again.  I don't see anything  
> that explains it to me at  
> http://fink.sourceforge.net/doc/porting/shared.php
>
> I THOUGHT it might be to do with the problem reported at:
> http://www.opendarwin.org/en/faq.php#linksym
>
> because that says all the -L and -l statements need to be listed AFTER  
> the object files, and that isn't the case in the failed compile above.  
>  But typing it in all manually at the command prompt so that the -L's  
> and -l's come last did not change / get rid of the ld error for me.
>
> Well, for now my workaround is to not include $DLLIB in the NVIZ  
> compile, and I'll leave it at that for now, but can help track this  
> down over time if needed.
>
> Thanks,
>
> Scott
>
> On Monday, November 18, 2002, at 11:53 PM, Glynn Clements wrote:
>
>>
>> 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>
>>
>
> _______________________________________________
> grass5 mailing list
> grass5 at grass.itc.it
> http://grass.itc.it/mailman/listinfo/grass5
>
------
Scott W. Mitchell						smitch at geog.utoronto.ca
Department of Geography					Phone: (613) 730-5375
University of Toronto at Mississauga	UTM fax: (905) 828-5273
3359 Mississauga Road					Local fax (613) 822-5143
Mississauga, ON L5L 1C6					Canada




More information about the grass-dev mailing list