[GRASS-dev] debugging nviz with TclTk 8.5 aqua

William Kyngesburye woklist at kyngchaos.com
Wed Jul 23 17:17:09 EDT 2008


On Jul 23, 2008, at 3:48 PM, Glynn Clements wrote:

> Michael Barton wrote:
>
>> Something else to keep in mind. The header I posted is needed by Togl
>> I think. But I also think that it is 8.5 only.
>
> Do you mean that the packages for earlier versions don't include
> tkMacOSXInt.h? Togl definitely requires that header, so if it's only
> available with 8.5, then your only choice is 8.5.
>
> Which means that you have to link against 8.5.
>
OSX 10.5's system TclTk 8.4 includes this, there's a PrivateHeaders  
folder in the framework that's an alias to Headers/tk-private.  OSX  
10.4 didn't include it.

> I'm not sure how OSX handles shared library versions.
>
> On Linux, a library named e.g. libtk.so will normally be a symlink to
> the actual library, which will include the version number. The linker
> embeds the versioned library name in the executable, and that is used
> for locating the library at run time. The unversioned symlink is only
> needed at compile time (and many distributions keep the symlink in the
> -devel package, along with the headers).
>
> The end result is that you can have multiple versions of a library
> installed, and control which version is used at compile time (without
> affecting the loading of libraries at run time) by changing the
> unversioned symlink.
>
> If OSX is similar, then you may just be able to delete the symlinks
> for the older versions.
>
Compiling does make use of symlinks to current versions.  For unix  
libraries, it's the same.  But for frameworks it's in the framework  
folder layout.  Since frameworks are complete packages of a library,  
different versions can simply be in a different location.

ie, to override the system tcltk framework v8.4 with your own 8.5,  
just install yours in /Library/Framworks and it will be found first,  
if -framework link flags are used.

Yet, even system frameworks that are unix ports often have symlinks  
in /usr/lib, so you need to make sure that you have -L/path/to/your/ 
lib in the linking, or link the framework directly instead of the  
library with -framework FWName.

> Alternatively, you could try changing the linking command in
> visualization/nviz/src/Makefile, moving XTRA_LDFLAGS (which will
> contain the --with-tcltk-libs= directory) to the beginning of the
> command, so that it takes precedence over other directories (where the
> 8.4 libraries are presumably being found by accident).
>
Or in include/make/platform.make, replace the TCLTKLIBS line with:

TCLTKLIBS = -framework Tcl -framework Tk

-----
William Kyngesburye <kyngchaos*at*kyngchaos*dot*com>
http://www.kyngchaos.com/

"Mon Dieu! but they are all alike.  Cheating, murdering, lying,  
fighting, and all for things that the beasts of the jungle would not  
deign to possess - money to purchase the effeminate pleasures of  
weaklings.  And yet withal bound down by silly customs that make them  
slaves to their unhappy lot while firm in the belief that they be the  
lords of creation enjoying the only real pleasures of existence....

- the wisdom of Tarzan




More information about the grass-dev mailing list