[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    Re: KDE/kdevplatform/plugins
From:       Andreas Hartmetz <ahartmetz () gmail ! com>
Date:       2009-06-07 19:50:06
Message-ID: 200906072150.07325.ahartmetz () gmail ! com
[Download RAW message or body]

On Sunday 07 June 2009 01:39:56 Andreas Pakulat wrote:
> On 06.06.09 21:05:34, Andreas Hartmetz wrote:
> > SVN commit 978363 by ahartmetz:
> > 
> > link with gold
> > 
> > M  +6 -4      git/tests/CMakeLists.txt
> > M  +2 -0      mercurial/tests/CMakeLists.txt
> > M  +1 -1      snippet/CMakeLists.txt
> > 
> > 
> > --- trunk/KDE/kdevplatform/plugins/git/tests/CMakeLists.txt
> > #978362:978363 @@ -20,13 +20,15 @@
> > set( EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR} )
> > 	set(gitInitTest_SRCS initTest.cpp ../gitplugin.cpp)
> > kde4_add_unit_test(kdevgit-test ${gitInitTest_SRCS})
> > -	target_link_libraries(kdevgit-test
> > -		${QT_QTTEST_LIBRARY}
> > -		${KDE4_KDECORE_LIBS}
> > +    target_link_libraries(kdevgit-test
> > +        ${QT_QTTEST_LIBRARY}
> > +        ${KDE4_KDECORE_LIBS}
> > +        kdevplatformshell
> > +        kdevplatforminterfaces
> > kdevplatformutil
> > kdevplatformvcs
> > kdevplatformtestshell
> 
> This shouldn't be needed kdevplatformtestshell sets kdevplatformshell as
> link-interface library, which means the linker is supposed to \
> automatically link the library in. This suggests that either your linker \
> is broken, or CMake needs special support for the gold linker. Please \
> revert this and the similar commit you've done to kdevelop (the same \
> applies to the other 2 files this commit changes).
> 
The link interface libraries should, for all I know, be added to the g++ / \
ld  command-line by cmake. KOffice for example builds just fine after all \
its  libraries have gotten a comprehensive link interface. I had a \
discussion about  this with Thomas Zander and it turned out that this was \
how it was supposed to  work but it broke and people using ld didn't \
notice. Thomas fixed just a few  lines in some CMakeLists.txt and all the \
linker errors were gone. I suspect that the link interface setup here \
somehow doesn't work.

I'll explain the relevant difference between gold and ld here with an \
example: Consider Application App which uses libQtCore and libfoo (in App's \
code). With ld, you can link App against libQtCore and because libQtCore \
uses libfoo  internally you get libfoo automatically.
With gold, you have to add libfoo to the linker command line because App \
uses  it and gold will *not* search for App's dependencies in libQtCore's \
required  libs. If App does not link against libfoo itself this problem is \
not present. So gold ist stricter and requires you to tell the linker about \
all libraries  you're going to use explicitly (i.e. not through other \
libraries).

Here is the linker command for kdevgit-test (changes reverted):

cd /home/horst/ksvn/Bkdevplatform/plugins/git/tests && /usr/local/bin/cmake \
-E  cmake_link_script CMakeFiles/kdevgit-test.dir/link.txt --verbose=1      \
                
/usr/lib/icecc/bin/c++   -O1 -Wnon-virtual-dtor -Wno-long-long -ansi \
-Wundef - Wcast-align -Wchar-subscripts -Wall -W -Wpointer-arith \
-Wformat-security -fno- exceptions -fno-check-new -fno-common \
-Woverloaded-virtual -fno-threadsafe- statics -fvisibility=hidden \
                -fvisibility-inlines-hidden -g3 -fno-inline  -fPIC 
-Wl,--enable-new-dtags -Wl,-Bsymbolic-functions -Wl,--as-needed  
CMakeFiles/kdevgit-test.dir/kdevgit-test_automoc.o CMakeFiles/kdevgit-
test.dir/initTest.o CMakeFiles/kdevgit-test.dir/__/gitplugin.o  -o kdevgit-
test -rdynamic -L/home/horst/ksvn/Bkdevplatform/lib -L/opt/kde4/lib 
/opt/kde4/lib/libQtTest.so /opt/kde4/lib/libkdecore.so.5.3.0 
../../../lib/libkdevplatformutil.so.1.0.0 
../../../lib/libkdevplatformvcs.so.1.0.0 
../../../lib/libkdevplatformtestshell.so.1.0.0 
../../../lib/libkdevplatformvcs.so.1.0.0 
../../../lib/libkdevplatformutil.so.1.0.0 /opt/kde4/lib/libkutils.so.4.3.0 
/opt/kde4/lib/libkparts.so.4.3.0 /opt/kde4/lib/libkio.so.5.3.0 
/opt/kde4/lib/libkdeui.so.5.3.0 /opt/kde4/lib/libQtSvg.so 
/opt/kde4/lib/libQtNetwork.so /opt/kde4/lib/libQtXml.so 
/opt/kde4/lib/libQtGui.so /opt/kde4/lib/libkdecore.so.5.3.0 
/opt/kde4/lib/libQtDBus.so /opt/kde4/lib/libQtCore.so -lpthread -Wl,-
rpath,/home/horst/ksvn/Bkdevplatform/lib:/opt/kde4/lib -Wl,-rpath-
link,/home/horst/ksvn/Bkdevplatform/lib:/opt/kde4/lib                       \
                
/usr/bin/ld-new: CMakeFiles/kdevgit-test.dir/kdevgit-test_automoc.o: in 
function vtable for GitPlugin:kdevgit-
test_automoc.cpp(.rodata._ZTV9GitPlugin+0x70): error: undefined reference \
to  'KDevelop::IPlugin::unload()'
(...)


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic