【问题标题】:Why ldd produces different result for the same file in different directories?为什么 ldd 对不同目录中的同一文件产生不同的结果?
【发布时间】:2015-10-31 07:34:22
【问题描述】:

我试图为 Linux 部署一个 Qt/QML 应用程序。发生了一些奇怪的事情,目标系统抱怨libQt5Widget.so.5 中的未定义符号,而我复制了该文件的ldd -r 结果中显示的所有Qt 相关库,目标系统上的ldd -r 表示没有“未找到” “图书馆。

一段时间后,我发现即使在我自己的系统中ldd -r 也发现了未定义的符号。但是,当我ldd -r Qt 安装目录中的同一文件时,没有找到未定义的符号。

输出如下所示:

wyl8899@Ubuntu:~/deploy/Qt_Libraries$ ldd -r libQt5Widgets.so.5
    linux-vdso.so.1 =>  (0x00007ffd1409a000)
    libQt5Gui.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5 (0x00007faac833d000)
    libQt5Core.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007faac7c97000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007faac7a79000)
(... and much more)
    libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007faac0d13000)
    libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007faac0b0d000)
undefined symbol: _ZNK19QAbstractTableModel7siblingEiiRK11QModelIndex   (./libQt5Widgets.so.5)
undefined symbol: _ZTI17QPixmapIconEngine   (./libQt5Widgets.so.5)
undefined symbol: _ZN17QPixmapIconEngine5paintEP8QPainterRK5QRectN5QIcon4ModeENS5_5StateE   (./libQt5Widgets.so.5)
(... and much more)

wyl8899@Ubuntu:~/deploy/Qt_Libraries$ ldd -r /opt/Qt/5.5/gcc_64/lib/libQt5Widgets.so.5
    linux-vdso.so.1 =>  (0x00007fff4b5e5000)
    libQt5Gui.so.5 => /opt/Qt/5.5/gcc_64/lib/libQt5Gui.so.5 (0x00007ff5e3978000)
    libQt5Core.so.5 => /opt/Qt/5.5/gcc_64/lib/libQt5Core.so.5 (0x00007ff5e3233000)
(... and much more)
    libdrm.so.2 => /usr/lib/x86_64-linux-gnu/libdrm.so.2 (0x00007ff5dcdad000)
    libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007ff5dcba9000)
    libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007ff5dc9a3000)

我还注意到显示的库数量不同。我想知道是什么原因导致ldd -r 对不同目录中的同一个文件产生不同的结果。谢谢!

【问题讨论】:

    标签: qt deployment shared-libraries ldd


    【解决方案1】:

    我不是 100% 确定,但我想说,在第一种情况下,ldd 会选择你的系统 Qt 库:

    • libQt5Core.so.5 in /usr/lib/x86_64-linux-gnu/
    • libQt5Gui.so.5 in /usr/lib/x86_64-linux-gnu/

    并且它们没有必需的符号。在第二种情况下,ldd 会选择与libQt5Widgets.so.5 位于同一目录中的 Qt 库:

    • libQt5Core.so.5 in /opt/Qt/5.5/gcc_64/lib/
    • libQt5Gui.so.5 in /opt/Qt/5.5/gcc_64/lib/

    它们确实有必需的符号。

    【讨论】:

      猜你喜欢
      • 2020-06-09
      • 2020-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-12
      • 1970-01-01
      相关资源
      最近更新 更多