Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 为什么ldd对不同目录中的同一文件产生不同的结果?_Qt_Deployment_Shared Libraries_Ldd - Fatal编程技术网

Qt 为什么ldd对不同目录中的同一文件产生不同的结果?

Qt 为什么ldd对不同目录中的同一文件产生不同的结果?,qt,deployment,shared-libraries,ldd,Qt,Deployment,Shared Libraries,Ldd,我试图为Linux部署一个Qt/QML应用程序。奇怪的是,目标系统抱怨libQt5Widget.so.5中的符号未定义,而我复制了该文件的ldd-r结果中显示的所有Qt相关库,目标系统上的ldd-r表示没有“未找到”库 过了一段时间,我发现甚至在我自己的系统中,ldd-r也发现了未定义的符号。但是,当Ildd-r在Qt安装目录中找到同一个文件时,没有找到未定义的符号 输出如下所示: wyl8899@Ubuntu:~/deploy/Qt_Libraries$ ldd -r libQt5Widget

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

过了一段时间,我发现甚至在我自己的系统中,
ldd-r
也发现了未定义的符号。但是,当I
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
对不同目录中的同一文件产生不同的结果。谢谢

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

  • libQt5Core.so.5
    in
    /usr/lib/x86\u 64-linux-gnu/
  • libQt5Gui.so.5
    in
    /usr/lib/x86\u 64-linux-gnu/
他们没有必要的符号。在第二种情况下,
ldd
拾取与所指向的
libQt5Widgets位于同一目录中的Qt库。so.5

  • libQt5Core.so.5
    in
    /opt/Qt/5.5/gcc\u 64/lib/
  • libQt5Gui.so.5
    in
    /opt/Qt/5.5/gcc\u 64/lib/
它们确实有必要的符号