2015-08-07 1 views
1

J'essayais de déployer une application Qt/QML pour Linux. Quelque chose d'étrange s'est produit que le système cible se plaignait de symbole non défini dans libQt5Widget.so.5, alors que j'avais copié toutes les bibliothèques liées à Qt montrées dans ldd -r résultat de ce fichier, et ldd -r sur le système cible a déclaré qu'il n'y a pas de bibliothèques "non trouvées". Après un certain temps, j'ai découvert que même ldd -r dans mon propre système repéré des symboles indéfinis. Lorsque je ldd -r le même fichier dans le répertoire d'installation Qt, cependant, aucun symbole indéfini n'a été trouvé.Pourquoi ldd produit un résultat différent pour le même fichier dans différents répertoires?

La sortie ressemblait à ceci:

[email protected]:~/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) 

[email protected]:~/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) 

J'ai aussi remarqué que le nombre de bibliothèques affichées diffère. Je voudrais savoir ce qui a causé ldd -r produit un résultat différent pour le même fichier dans différents répertoires. Merci!

Répondre

0

Je ne suis pas sûr à 100%, mais je dirais que dans le premier cas ldd prend votre système bibliothèques Qt:

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

et ils n'ont pas les symboles requis. Dans le second cas ldd reprend les bibliothèques Qt qui sont dans le même répertoire comme indiqué libQt5Widgets.so.5:

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

et ils ont des symboles requis .