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

List:       kde-devel
Subject:    Re: Error building kdebase libphonon.so: undefined reference to
From:       Eduardo Robles Elvira <edulix () gmail ! com>
Date:       2009-12-18 9:36:25
Message-ID: 9e2d3ad60912180136q43c8b32eg5fae9f527006d84c () mail ! gmail ! com
[Download RAW message or body]

Hello again,

I'm having similar problems again, this time when building kdevplatform. I get:


Built target kdev_starter_automoc
Building CXX object
kdevplatform/util/kdev_starter/CMakeFiles/kdev_starter.dir/main.o
Linking CXX executable kdev_starter
CMakeFiles/kdev_starter.dir/main.o: In function
`QList<QString>::detach_helper()':
/home/edulix/proyectos/kde4/qt4/include/QtCore/qlist.h:604: undefined
reference to `QListData::detach3()'
collect2: ld returned 1 exit status
make[2]: *** [kdevplatform/util/kdev_starter/kdev_starter] Error 1
make[1]: *** [kdevplatform/util/kdev_starter/CMakeFiles/kdev_starter.dir/all]
Error 2

I recently removed all my installation and did a --refresh-build as I
already commented here. So this is what I've seen:

1. First, looking at the code in
/home/edulix/proyectos/kde4/qt4/include/QtCore/qlist.h at line 604,
there is:

template <typename T>
Q_OUTOFLINE_TEMPLATE void QList<T>::detach_helper()
{
    Node *n = reinterpret_cast<Node *>(p.begin());
    QListData::Data *x = p.detach3(); // <<<<<<<<<< LINE 604 HERE
    QT_TRY {
        node_copy(reinterpret_cast<Node *>(p.begin()),
reinterpret_cast<Node *>(p.end()), n);
    } QT_CATCH(...) {
        qFree(d);
        d = x;
        QT_RETHROW;
    }

    if (!x->ref.deref())
        free(x);
}

2. Changing detach3() with detach2() (which is being deprecated for QT
5 but that's nothing to worry for now :P) magically works and
generates correctly the kdeveplatform binary kdev_helper, which seems
in turn to be linking to the correct libQtCore:


edulix@edulix-laptop:~/proyectos/kde4/src/build/extragear/sdk/kdevplatform/util/kdev_starter$
make
Built target kdev_starter_automoc
Scanning dependencies of target kdev_starter
Building CXX object
kdevplatform/util/kdev_starter/CMakeFiles/kdev_starter.dir/main.o
Linking CXX executable kdev_starter
Built target kdev_starter
edulix@edulix-laptop:~/proyectos/kde4/src/build/extragear/sdk/kdevplatform/util/kdev_starter$
cb

edulix@edulix-laptop:~/proyectos/kde4/src/build/extragear/sdk/kdevplatform/util/kdev_starter$
ldd kdev_starter
        linux-vdso.so.1 =>  (0x00007fff591ff000)
        libQtCore.so.4 =>
/home/edulix/proyectos/kde4/qt4/lib/libQtCore.so.4
(0x00007f2c56c53000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f2c56943000)
        libm.so.6 => /lib/libm.so.6 (0x00007f2c566bf000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f2c564a8000)
        libc.so.6 => /lib/libc.so.6 (0x00007f2c56139000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x00007f2c55f1d000)
        libz.so.1 => /lib/libz.so.1 (0x00007f2c55d06000)
        libdl.so.2 => /lib/libdl.so.2 (0x00007f2c55b02000)
        libgthread-2.0.so.0 => /usr/lib/libgthread-2.0.so.0 (0x00007f2c558fd000)
        librt.so.1 => /lib/librt.so.1 (0x00007f2c556f5000)
        libglib-2.0.so.0 => /lib/libglib-2.0.so.0 (0x00007f2c5542e000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f2c570ac000)
        libpcre.so.3 => /lib/libpcre.so.3 (0x00007f2c55200000)

3. So I started inspecting the code in qlist.cpp, and I found that in
the code, detach3 is as defined as detach2:


edulix@edulix-laptop:~/proyectos/kde4/src/qt-copy/src/corelib/tools$
grep -C 2 "*QListData::detach" qlist.cpp
#  error "Remove QListData::detach(), it is only required for binary
compatibility for 4.0.x to 4.2.x"
#endif
QListData::Data *QListData::detach()
{
    Data *x = static_cast<Data *>(qMalloc(DataHeaderSize + d->alloc *
sizeof(void *)));
--
#  error "Remove QListData::detach2(), it is only required for binary
compatibility for 4.3.x to 4.5.x"
#endif
QListData::Data *QListData::detach2()
{
    Data *x = d;
--
 *  \internal
 */
QListData::Data *QListData::detach3()
{
    Data *x = d;


4. And indeed, inspecting the library that was shown to be linked by
kdev_starter (/home/edulix/proyectos/kde4/qt4/lib/libQtCore.so.4), the
symbol was there, at least in the debug version which I asume that has
the same symbols as the other versions as they were built at the same
time:


edulix@edulix-laptop:~/proyectos/kde4/src/qt-copy/src/corelib/tools$ l
/home/edulix/proyectos/kde4/qt4/lib/libQtCore.so.4*
lrwxrwxrwx 1 edulix edulix   18 2009-12-17 23:20
/home/edulix/proyectos/kde4/qt4/lib/libQtCore.so.4 ->
libQtCore.so.4.6.1
lrwxrwxrwx 1 edulix edulix   18 2009-12-17 23:20
/home/edulix/proyectos/kde4/qt4/lib/libQtCore.so.4.6 ->
libQtCore.so.4.6.1
-rwxr-xr-x 1 edulix edulix 2,4M 2009-12-17 23:20
/home/edulix/proyectos/kde4/qt4/lib/libQtCore.so.4.6.1
-rw-r--r-- 1 edulix edulix  23M 2009-12-17 21:09
/home/edulix/proyectos/kde4/qt4/lib/libQtCore.so.4.6.1.debug
edulix@edulix-laptop:~/proyectos/kde4/src/qt-copy/src/corelib/tools$
nm /home/edulix/proyectos/kde4/qt4/lib/libQtCore.so.4.6.1  | grep
detach | grep QListData
nm: /home/edulix/proyectos/kde4/qt4/lib/libQtCore.so.4.6.1: no symbols
edulix@edulix-laptop:~/proyectos/kde4/src/qt-copy/src/corelib/tools$
nm /home/edulix/proyectos/kde4/qt4/lib/libQtCore.so.4.6.1.debug  |
grep detach | grep QListData
00000000000a0420 T _ZN9QListData6detachEv
00000000000a0390 T _ZN9QListData7detach2Ev
00000000000a0320 T _ZN9QListData7detach3Ev

So.. what's happening? Well something is wrong :P

Regards,
  Eduardo Robles Elvira.
 
>> Visit http://mail.kde.org/mailman/listinfo/kde-devel#unsub to unsubscribe <<
[prev in list] [next in list] [prev in thread] [next in thread] 

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