如何找到链接到Qt的坏版本的代码部分?

时间:2014-08-08 08:50:36

标签: c++ linux qt qt5

我想在Qt5中构建一些项目(用Qt4编写但后续更改)。构建是成功的,但是当我尝试运行输出文件时,它崩溃了。我认为这是因为将libQtCore.so.4链接在一个地方(我通过“ldd OutputFile”看到它)。我的问题是:我怎样才能找到那部分代码,它指的是Qt4模块?该项目非常庞大,有数百个文件,调试器没有帮助。

1 个答案:

答案 0 :(得分:2)

仅供参考;为了快速检查是否是由于通过共享库的间接依赖(通常是大型项目的情况),我会使用lddtree包中的pax-utils(我使用Ubuntu 12.04)< / p>

$ 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...)

如果你有一个直接链接到许多共享库的单个二进制文件,那么优于ldd的优势就不那么多了,不过