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

Re: The dpkg problem revisited

Frank Neumann <Frank.Neumann@arbi.informatik.uni-oldenburg.de> writes:

|> Hi,
|> this is a problem Juergen already pointed out some weeks ago, and I
|> noticed the same thing: dpkg requires one small patch to compile ok
|> on the m68k platform. Juergen asked Andreas if he could look into this,
|> but I think Andreas didn't see the explanation of the problem, so I'll
|> resend it:

|> In dpkg-1.1.0/dselect/main.cc there are 3 functions named helponly(), 
|> versiononly() and setdebug(). In the original source they are declared as 
|> "static void", but if you try to link these (gcc 2.7.2, binutils 2.6), 
|> ld says:

|> gcc  -o dselect main.o         bindings.o     curkeys.o      helpmsgs.o basecmds
|> .o     baselist.o     basetop.o pkgcmds.o      pkgdepcon.o    pkgdisplay.o   pkg
|> info.o      pkgkeys.o pkglist.o      pkgsublist.o   pkgtop.o methkeys.o     meth
|> od.o       methparse.o    methlist.o -L../lib -ldpkg -lncurses
|> main.o(.rodata+0x698): undefined reference to `setdebug(cmdinfo const *, char co
|> nst *)'
|> main.o(.rodata+0x6b6): undefined reference to `helponly(cmdinfo const *, char co
|> nst *)'
|> main.o(.rodata+0x6d4): undefined reference to `versiononly(cmdinfo const *, char
|>  const *)'
|> make[2]: *** [dselect] Error 1

That's a bug in the compiler, the g++ part.  It doesn't notice that
the functions are referenced and doesn't compile them in.  You can
work around it by decreasing the optimization level when compiling
main.cc (the default -O3 includes -finline-functions, which is the
culprit).  I have already reported that bug to bug-g++, hopefully it
will be fixed in the next release.


Reply to: