I've been trying to compile (more exactly, create working Gentoo packages
for) kdetoys from the 3.5.13 version of Trinity. amor, kodo, kteatime, and
ktux all work perfectly, but eyesapplet, fifteenapplet, kmoon, kweather,
and kworldclock all fail at the linking stage:
/bin/sh ../libtool --tag=CXX --mode=link i686-pc-linux-gnu-g++ -Wno-long-long -Wundef
-ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wchar-subscripts -Wall -W
-Wpointer-arith -DNDEBUG -DNO_DEBUG -O2 -O2 -march=i686 -pipe -Wformat-security
-Wmissing-format-attribute -Wno-non-virtual-dtor -fno-exceptions -fno-check-new
-fno-common -I/usr/include/tqt -DQT_CLEAN_NAMESPACE -DQT_NO_ASCII_CAST -DQT_NO_STL
-DQT_NO_COMPAT -DQT_NO_TRANSLATION -Wl,-O1 -Wl,--as-needed -o eyes_panelapplet.la -rpath
/usr/kde/3.5/lib/trinity -avoid-version -module -no-undefined -Wl,--no-undefined
-Wl,--allow-shlib-undefined -R /usr/kde/3.5/lib -R /usr/kde/3.5/lib -R /usr/qt/3/lib
-module -L/usr/kde/3.5/lib -L/usr/qt/3/lib eyes.lo -lkdeui
libtool: link: i686-pc-linux-gnu-g++ -fPIC -DPIC -shared -nostdlib
/usr/lib/gcc/i686-pc-linux-gnu/4.5.3/../../../crti.o
/usr/lib/gcc/i686-pc-linux-gnu/4.5.3/crtbeginS.o .libs/eyes.o -Wl,-rpath
-Wl,/usr/kde/3.5/lib -Wl,-rpath -Wl,/usr/kde/3.5/lib -Wl,-rpath -Wl,/usr/qt/3/lib
-Wl,--as-needed -L/usr/kde/3.5/lib -L/usr/qt/3/lib /usr/kde/3.5/lib/libkdeui.so
-L/usr/lib/gcc/i686-pc-linux-gnu/4.5.3
-L/usr/lib/gcc/i686-pc-linux-gnu/4.5.3/../../../../i686-pc-linux-gnu/lib
-L/usr/lib/gcc/i686-pc-linux-gnu/4.5.3/../../.. -lstdc++ -lm -lc -lgcc_s
/usr/lib/gcc/i686-pc-linux-gnu/4.5.3/crtendS.o
/usr/lib/gcc/i686-pc-linux-gnu/4.5.3/../../../crtn.o -O2 -O2 -march=i686 -Wl,-O1
-Wl,--no-undefined -Wl,--allow-shlib-undefined -Wl,-soname -Wl,eyes_panelapplet.so -o
.libs/eyes_panelapplet.so
.libs/eyes.o: In function `EyesApplet::timerEvent(QTimerEvent*)':
eyes.cpp:(.text+0xc4): undefined reference to `QCursor::pos()'
eyes.cpp:(.text+0xda): undefined reference to `QWidget::mapFromGlobal(QPoint const&)
const'
eyes.cpp:(.text+0xf3): undefined reference to `QWidget::update()'
.libs/eyes.o: In function `EyesApplet::resizeEvent(QResizeEvent*)':
eyes.cpp:(.text+0x140): undefined reference to `QWidget::resizeEvent(QResizeEvent*)'
I'll spare you another 200 lines of the same (the full build log for eyesapplet is
attached
if anyone wants a look). Anyway, it looks very similar to the problem Baho Utot was
having about a month and a half ago, with QT apparently not being linked when it should.
(Speculation follows . . .)
Now, here's the interesting bit. Most of the applications in kdetoys are quite
small,
so I figured I'd crack them open and have a look at the code. I found out that all
the applications that failed to link had something in common: they all, at some
point, had an #include for <kpanelapplet.h>. The applications that linked
correctly
did not, as far as I could tell, make use of kpanelapplet.h. That might or might
not be a coincidence.
It's possible that the --as-needed linker flag also plays into this somehow. Its
purpose
is to strip libraries which are linked but never used by the final application they're
linked
to. However, it's been known to strip libs that *are* used from software that relies
on implicit library inclusions. Doing that can cause linking to fail due to missing
libraries, which again is kind of suspicious but not positive proof that it's
involved.
Gentoo's package manager forces this flag on.
Show replies by date