Почему ldd выдает разные результаты для одного и того же файла в разных каталогах?

Я пытался развернуть приложение Qt/QML для Linux. Произошло что-то странное, что целевая система пожаловалась на неопределенный символ в libQt5Widget.so.5, в то время как я скопировал все связанные с Qt библиотеки, показанные в ldd -r результате этого файла, а 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 дает разные результаты для одного и того же файла в разных каталогах. Спасибо!


person wyl8899    schedule 07.08.2015    source источник


Ответы (1)


Я не уверен на 100%, но я бы сказал, что в первом случае ldd подбирает ваши системные библиотеки Qt:

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

и у них нет необходимых символов. Во втором случае ldd подбирает библиотеки Qt, которые находятся в том же каталоге, что и указанный libQt5Widgets.so.5:

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

и у них есть необходимые символы.

person danadam    schedule 04.02.2016