我正在尝试为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
为不同目录中的同一文件产生不同的结果。谢谢!
答案 0 :(得分:0)
我不是百分百肯定,但我说在第一种情况下ldd
会选择你的系统Qt库:
libQt5Core.so.5
中的/usr/lib/x86_64-linux-gnu/
libQt5Gui.so.5
/usr/lib/x86_64-linux-gnu/
他们没有必要的符号。在第二种情况下,ldd
选择与指向libQt5Widgets.so.5
位于同一目录中的Qt库:
libQt5Core.so.5
中的/opt/Qt/5.5/gcc_64/lib/
libQt5Gui.so.5
/opt/Qt/5.5/gcc_64/lib/
他们确实有必要的符号。