link error with gold in kdebase

Andreas Hartmetz ahartmetz at gmail.com
Mon May 31 16:41:31 BST 2010


On Sunday 30 May 2010 16:53:38 Tobias Koenig wrote:
> Hej,
> 
> since the recent changes to nepomuk, kdebase doesn't compile any longer
> with gold linker:
> 
> Linking CXX shared module ../../../../lib/nepomukfilewatch.so
> /usr/bin/ld: warning: hidden symbol
> 'DBusConnectionPool::threadConnection()' in
> CMakeFiles/nepomukfilewatch.dir/__/__/common/dbusconnectionpool.o is
> referenced by DSO /opt/kde-trunk/lib/libnepomukquery.so /usr/bin/ld:
> error: treating warnings as errors
> collect2: ld returned 1 exit status
> make[2]: *** [lib/nepomukfilewatch.so] Error 1
> make[1]: ***
> [runtime/nepomuk/services/filewatch/CMakeFiles/nepomukfilewatch.dir/all]
> Error 2 make: *** [all] Error 2
> 
> Any idea how to fix it?
> 
I get the same error. DBusConnectionPool::threadConnection() exists in both 
kdelibs and kdebase, which might somehow confuse gold. The whole thread-
connection thing is a bit ugly because, AFAIK, it is a workaround for a 
libdbus bug. Due to that it is questionable if it should be part of any 
official API and of the public interface of kdelibs.
AFAICS it should be OK that the symbol is hidden in the object file 
dbusconnectionpool.o; otherwise one couldn't link together any object files 
that use each other's hidden symbols. Hidden symbols are only supposed to be 
hidden from the end product, the .so file (right?).
I'm not sure if it's OK that there are two eligible definitions of the symbol, 
the exported one from kdelibs and the hidden one from kdebase.
I have fixed the problem locally by installing the header from kdelibs that 
exports  DBusConnectionPool::threadConnection() and deleting the copy in 
kdebase. This is not generally applicable until a decision about the correct 
basic approach to the libdbus bug is made.




More information about the kde-core-devel mailing list