[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: compiler/linker isssues



On Wed, May 28, 2003 at 04:39:42PM +0200, Robert Millan wrote:
> On Tue, May 27, 2003 at 05:22:31PM +0200, Marcus Brinkmann wrote:
> > 
> > A complete build log.  If possible, the whole build three somewhere, that
> > allows me to look at the actual object files.  Then you need to repeat the
> > gcc/link command that fails with -v, so we see the whole command.  The
> > version of gcc/g++/... (which Debian package) you are using is also important.
> 
> see http://people.debian.org/~rmh/gtkgl2/

Ok.  Yeah, this is what I meant with something being wrong with the X
libraries.

On my system, libGLU is linked against libstdc++:

ulysses:~# objdump -p /usr/X11R6/lib/libGLU.so.1 |grep NEEDED
  NEEDED      libstdc++-libc6.2-2.so.3
  NEEDED      libm.so.6
  NEEDED      libc.so.6

And if that dependency is there, usually things will work fine if you link
against libGLU even if you do not link against its dependencies.  So, even
though the whole thing smells like rotten fish, as long as we do the same as
GNU/Linux and have the NEEDED entry in libGLU, things should work just fine.

However, this is still bogus, because the requirement is that you have to
link with each library that is required, and in the right order, and you are
not formally allowed to leave out a dependency of another library on the
link line.  This is particularly important if you want to link statically. 
If you link statically, the sharedl ibs dependency information is absent,
and the linking will fail.  This is the reason why projects with many
library dependencies invented the -config scripts, so programs know what to
link against:

ulysses:~# pkg-config --libs gtk+
-L/usr/X11R6/lib -lgtk -lgdk -lXi -lXext -lX11 -lm -lglib

Try this out, you can build programs against -lgtk without adding all
libraries above, but not if you do it statically, and it is not formally
correct.  You are expected to list them all.

Now, to libGLU.  I don't remember if libGLU was a C++ library that had a C
interface, or the other way round.  In any way, they are doing somethig
pretty strange.  Formally, your bug reports have been correct, because you
are required to list all dependencies.  However, it might be the simplest
thing to just make sure that libGLU has the inter-library dependency to
libstdc++ and that this will make things work automagically for all
situations in that it works on GNU/Linux, and leave these people with their
errors.

I think this only leaves us with libgcrypt.

Thanks,
Marcus


-- 
`Rhubarb is no Egyptian god.' GNU      http://www.gnu.org    marcus@gnu.org
Marcus Brinkmann              The Hurd http://www.gnu.org/software/hurd/
Marcus.Brinkmann@ruhr-uni-bochum.de
http://www.marcus-brinkmann.de/



Reply to: