Hi

In the last days/week i get more and more linking problems. I have them mostly 
with phonon. In my 
journey to better understand all that linking stuff i kept searching for the 
reason. Here is what i 
found so far:

The problem itself is easy. Qt ships a phonon without the symbol 
Phonon::VideoPlayer::Event(QEvent*). This was added in phon git recently. As we 
still haven't found 
a satisfying solution for the problem how to build qt with respect to phonon if 
you want qt's phonon 
support AND phonon from git i pretended there is no problem and compiled both 
qt with phonon and 
phonon itself.

Qt goes into /kde4/qt/4.6 (But it's 4.7 git/master)
Phonon goes into /kde4/trunk/support

Given the promise of rpath and our advanced build system i hoped things would 
work. But they do not. 
>From time to time stuff suddenly fails to link. The reason is simple.

As an example currently kdepim is falling for me.

cd /home/mjansen/kde4/trunk/bld/KDE/kdepim/akregator/export && /usr/bin/cmake 
-E cmake_link_script 
CMakeFiles/akregatorstorageexporter.dir/link.txt --verbose=1                  
/kde4/trunk/kde/bin/c++    -Wnon-virtual-dtor -Wno-long-long -ansi -Wundef 
-Wcast-align -Wchar-
subscripts -Wall -W -Wpointer-arith -Wformat-security -fno-exceptions 
-DQT_NO_EXCEPTIONS -fno-check-
new -fno-common -Woverloaded-virtual -fno-threadsafe-statics 
-fvisibility=hidden -fvisibility-
inlines-hidden -g -O2 -fno-reorder-blocks -fno-schedule-insns -fno-inline  
-Wl,--enable-new-dtags -
Wl,--no-add-needed -Wl,--fatal-warnings 
CMakeFiles/akregatorstorageexporter.dir/akregatorstorageexporter_automoc.o 
CMakeFiles/akregatorstorageexporter.dir/akregatorstorageexporter.o  -o 
akregatorstorageexporter -
rdynamic -L/kde4/trunk/kde/lib64 -L/home/mjansen/kde4/trunk/bld/KDE/kdepim/lib 
-L/kde4/qt/4.6/lib64 
/kde4/trunk/kde/lib64/libkdecore.so.5.6.0 
/kde4/trunk/kde/lib64/libsyndication.so.4.6.0 
../../lib/libakregatorinterfaces.so.4.6.0 
/kde4/trunk/kde/lib64/libsyndication.so.4.6.0 
/kde4/trunk/kde/lib64/libkdecore.so.5.6.0 /kde4/qt/4.6/lib64/libQtDBus.so 
/kde4/qt/4.6/lib64/libQtCore.so -lpthread -Wl,-
rpath,/home/mjansen/kde4/trunk/bld/KDE/kdepim/lib:/kde4/trunk/kde/lib64:/kde4/qt/4.6/lib64
 -Wl,-
rpath-link,/home/mjansen/kde4/trunk/bld/KDE/kdepim/lib:/kde4/trunk/kde/lib64 
/kde4/trunk/kde/lib64/libkhtml.so.5: undefined reference to 
`Phonon::VideoPlayer::event(QEvent*)'
collect2: ld returned 1 exit status
make[2]: *** [akregator/export/akregatorstorageexporter] Fehler 1
make[2]: Leaving directory `/home/mjansen/kde4/trunk/bld/KDE/kdepim'
make[1]: *** [akregator/export/CMakeFiles/akregatorstorageexporter.dir/all] 
Fehler 2
make[1]: Leaving directory `/home/mjansen/kde4/trunk/bld/KDE/kdepim'
make: *** [all] Fehler 2

As you can see it complains that it can't resolve a symbol for khtml. Which is 
not specified on the 
commandline. It picks that up as a dependency for some other shared lib. It 
then picks up a 
libphonon itself too. The directories it looks into for those libs are those 
specified by the linker 
command line option 
-rpath-link,/home/mjansen/kde4/trunk/bld/KDE/kdepim/lib:/kde4/trunk/kde/lib64

Seeing that its easy to understand why the libphonon from /kde4/trunk/support 
is not picked up. It's 
not part of that list. If i add it everything works fine.

The list there has absolute precedence so i have no way to make it link but 
adding phonon to khtml's 
link interface. Which it is not part of because khtml does not expose it in 
it's api.

If i remove the libs from the qt installtion directory everything links. But if 
i understand the man 
page correctly this is only because i have a native linker. It picks phonon 
either over 
LD_LIBRARY_PATH or the DT_NEEDED and RPATH flags from some already known shared 
lib.

When cross-compiling things should fail completely. Because there is no rule 
after rpath that would 
pick up a correct version

I had the same problem with a poppler distro package. During some linking it 
would pick up 
indirectly the poppler lib from /usr/... instead of my self compiled version. 
Remember we only speak 
of the linking. Running picks up the correct lib because of LD_LIBRARY_PATH

So my questions:

1. Where does that list after rpath-link come from?
2. How can i influence it's content?
3. Do we have a problem with our LINK_INTERFACE by only beeing able to specify 
which libs we need 
and not beeing able to specify where WE took it from? KHTML needs phonon but it 
does not tell me 
openly. So how am i supposed to make sure it's found?

Or do i really have to remove all distro-package for each and every self 
compiled part of my kde 
development setup. And i mean the libs not some devel-packages.

Mike
_______________________________________________
Kde-buildsystem mailing list
[email protected]
https://mail.kde.org/mailman/listinfo/kde-buildsystem

Reply via email to