--as-needed problem
Matt Rogers
mattr at kde.org
Tue Nov 9 17:27:58 GMT 2004
On Tuesday 09 November 2004 11:17 am, Szombathelyi György wrote:
> 2004. november 9. 13.52 dátummal Lubos Lunak ezt írta:
> > Hello,
> >
> > there seems to be a problem with --enable-as-needed. I updated kdelibs,
> > and I get the following error when building it:
> >
> > ./kdoctools/meinproc --srcdir=/home/llunak/build/src/kdelibs/kdoctools
> > --check --cache ./doc/kspell/index.cache.bz2
> > /home/llunak/build/src/kdelibs/doc/kspell/index.docbook
> > /home/llunak/build/suse/kdelibs/kdoctools/.libs/lt-meinproc: symbol
> > lookup error: /home/llunak/build/suse/kdelibs/kio/.libs/libkio.so.4:
> > undefined symbol: _ZN9KIconView8takeItemEP13QIconViewItem
> > Error creating ./doc/kspell/index.cache.bz2. Exit status 127.
> >
> > That's a clean checkout and clean build, from today about 12:00 CET.
> > Using --disable-as-needed with configure and relinking avoids the
> > problem.
> >
> > The undefined symbol above is from KIconView, i.e. libkdeui. Using ldd
> > on lt-meinproc shows that e.g. libkio is used from builddir, but libkdeui
> > is used from $KDEDIR/lib . Since it's been a couple of days since my last
> > update, the installed libkdeui doesn't have the symbol yet.
> >
> > Can somebody fix it please?
>
> The problem is that libtool puts all paths to direct and indirect
> dependencies into the RPATH section of lt-meinproc, but since libkdeui is
> not a direct dependency, it's not listed in the NEEDED section.
>
> $ objdump -p lt-meinproc (only relevant parts):
>
> NEEDED libkio.so.4
> NEEDED libkdecore.so.4
> NEEDED libqt-mt.so.3
> NEEDED libbz2.so.1
> NEEDED libxslt.so.1
> NEEDED libxml2.so.2
> NEEDED libstdc++.so.5
> NEEDED libc.so.6
> RPATH
> /home/gyuri/cvs/kdelibs/kio/.libs:/home/gyuri/cvs/kdelibs/kdeui/.libs:/home
>/gyuri/cvs/kdelibs/kdesu/.libs:/home/gyuri/cvs/kdelibs/kwallet/client/.libs:
>/home/gyuri/cvs/kdelibs/kdecore/.libs:/home/gyuri/cvs/kdelibs/dcop/.libs:/ho
>me/gyuri/cvs/kdelibs/kdefx/.libs:/opt/kde3/lib:/usr/lib/qt-3.3/lib:/usr/X11R
>6/lib:/usr/lib
>
> $ objdump -p lt-meinproc:
>
> NEEDED libkdeui.so.4
> NEEDED libkdesu.so.4
> NEEDED libkwalletclient.so.1
> NEEDED libkdecore.so.4
> NEEDED libDCOP.so.4
> NEEDED libqt-mt.so.3
> NEEDED libX11.so.6
> NEEDED libpthread.so.0
> NEEDED libz.so.1
> NEEDED libfam.so.0
> NEEDED libstdc++.so.5
> NEEDED libc.so.6
> NEEDED libgcc_s.so.1
> SONAME libkio.so.4
> RPATH /opt/kde3/lib:/usr/lib/qt-3.3/lib:/usr/X11R6/lib
>
>
> So the library path for libkdeui is picked from libkio (libkio is depend
> directly on libkdeui), which has the RPATH set to $KDEDIR/lib. But if you
> remove $KDEDIR/lib/libkio.so.4, the dynamic linker falls back to the RPATH
> in lt-meinproc, and everything will work again.
> I hope this small(?) inconvenience will not end in removing the --as-needed
> patch (if you're a developer, and disturbed by this behavior you can always
> compile with --disable-as-needed), it's _very_ useful for making KDE
> packages.
>
> Thanks for listening,
> György
>
Personally, I think it should be off by default, and only be enabled by
--enable-as-needed.
.02,
Matt
More information about the kde-core-devel
mailing list