trivelt
trivelt

Reputation: 1965

How find part of code linking to bad version of Qt?

I want to build some project (written in Qt4 but with subsequent changes) in Qt5. Building is successfull, but when I try run output file, it crashes. I think that it is cause by linking libQtCore.so.4 in one place (I saw it by "ldd OutputFile"). My problem is: how can I find that part of code, which refers to Qt4 module? The project is really big and has hundreds of files, debugger didn't help.

Upvotes: 0

Views: 99

Answers (1)

nodakai
nodakai

Reputation: 8021

Just FYI; in order to quickly check if it was due to indirect dependency through shared libraries (as is commonly the case with a large project,) I would use lddtree from the pax-utils package (I use Ubuntu 12.04)

$ lddtree `which evince` 
evince => /usr/bin/evince (interpreter => /lib64/ld-linux-x86-64.so.2)
    libSM.so.6 => /usr/lib/i386-linux-gnu/libSM.so.6
        libuuid.so.1 => /lib/i386-linux-gnu/libuuid.so.1
            ld-linux.so.2 => /lib/i386-linux-gnu/ld-linux.so.2
    libICE.so.6 => /usr/lib/i386-linux-gnu/libICE.so.6
    libevdocument3.so.4 => /usr/lib/libevdocument3.so.4
        libgmodule-2.0.so.0 => /usr/lib/i386-linux-gnu/libgmodule-2.0.so.0
            libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2
        libz.so.1 => /lib/i386-linux-gnu/libz.so.1
    libevview3.so.3 => /usr/lib/libevview3.so.3
        libgailutil-3.so.0 => /usr/lib/x86_64-linux-gnu/libgailutil-3.so.0
        libgrip.so.0 => /usr/lib/libgrip.so.0
            libgeis.so.1 => /usr/lib/x86_64-linux-gnu/libgeis.so.1
                libgrail.so.5 => /usr/lib/x86_64-linux-gnu/libgrail.so.5
                    libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6
                    libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1
                libframe.so.6 => /usr/lib/x86_64-linux-gnu/libframe.so.6
(snip; too long...)

The advantage over ldd is not so much if you have a single binary directly linked to many shared libraries, though

Upvotes: 2

Related Questions