Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Plateformes Discussion :

Quels paquets installer ?


Sujet :

Plateformes

  1. #1
    Membre habitué
    Quels paquets installer ?
    Bonjour,

    J'ai développé une application sur Qt et, soucieux de satisfaire les demandes d'un ami linuxien, j'ai entrepris d'installer des machines virtuelles pour compiler sous Linux. Jusqu'ici pas de problème : j'ai les exécutables, quand je les teste tout fonctionne à merveille.
    Cependant, quand mon ami récupère le programme, celui-ci ne fonctionne pas : il lui manque les bibliothèques.
    J'ai eu beau chercher, écumer l'internet, impossible de trouver quels paquets il doit installer.
    Sachant que j'ai utilisé Qt 5.5.1 et que sous Windows (au cas où ça aide), mon programme utilise les .dll suivantes :
    icudt54.dll
    icuin54.dll
    icuuc54.dll
    libgcc_s_dw2-1.dll
    libstdc++-6.dll
    libwinpthread-1.dll
    Qt5Core.dll
    Qt5Gui.dll
    Qt5Widgets.dll
    Pouvez-vous m'aider ?

    Merci d'avance.


    P.S. : Il m'a aussi demandé les "instruction de compilation". J'imagine qu'il parle des commandes du genre "g++ -c -pipe -fno-keep-inline-dllexport -O2 -std=c++0x -frtti -Wall etc" pour compiler lui-même les sources. Je peux lui donner toutes les commandes comme ça qui s'affichent dans la sortie de compilation de Qt Creator, mais c'est bien ça qu'il me demande ? Et n'est-ce pas plus simple qu'il installe des paquages ?
    J'ajoute enfin que je ne suis pas familier du tout avec GNU/Linux. Je sais faire pwd, mkdir, cd et c'est marre. Et j'ai toujours utilisé des IDE pour compiler, même si je sais utiliser les commandes (à peu près).
    Les pointeurs intelligents, c'est mignon mais trop long à écrire.

  2. #2
    Membre chevronné
    Bonsoir.

    Exécuter la commande linux ldd dans un terminal, qui va lister les libs dépendantes de ton programme, te fournira les réponses.
    Il faudra installer les libs listées via le gestionnaire de paquets (apt-get, yum, rpm selon la distribution Linux).
    Un exemple sur un programme donne
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     $ ldd qtprogram
    linux-vdso.so.1 =>  (0x00007ffeb13d1000)
    libQt5Widgets.so.5 => /home/user/Qt/5.5/gcc_64/lib/libQt5Widgets.so.5 (0x00007fbec7bdd000)
    libQt5Gui.so.5 => /home/user/Qt/5.5/gcc_64/lib/libQt5Gui.so.5 (0x00007fbec73ca000)
    libQt5Core.so.5 => /home/user/Qt/5.5/gcc_64/lib/libQt5Core.so.5 (0x00007fbec6c85000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fbec6976000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fbec6760000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fbec6396000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fbec6178000)
    libgobject-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007fbec5f26000)
    libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007fbec5d24000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fbec5b1c000)
    libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fbec580d000)
    libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007fbec55fb000)
    libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fbec52c2000)
    libGL.so.1 => /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 (0x00007fbec502a000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fbec4d22000)
    libicui18n.so.54 => /home/user/Qt/5.5/gcc_64/lib/libicui18n.so.54 (0x00007fbec48b4000)
    libicuuc.so.54 => /home/user/Qt/5.5/gcc_64/lib/libicuuc.so.54 (0x00007fbec4506000)
    libicudata.so.54 => /home/user/Qt/5.5/gcc_64/lib/libicudata.so.54 (0x00007fbec2adc000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fbec28d8000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fbec845b000)
    libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007fbec26d0000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fbec2463000)
    libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fbec2244000)
    libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007fbec201b000)
    libglapi.so.0 => /usr/lib/x86_64-linux-gnu/libglapi.so.0 (0x00007fbec1ded000)
    libXdamage.so.1 => /usr/lib/x86_64-linux-gnu/libXdamage.so.1 (0x00007fbec1bea000)
    libXfixes.so.3 => /usr/lib/x86_64-linux-gnu/libXfixes.so.3 (0x00007fbec19e4000)
    libX11-xcb.so.1 => /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1 (0x00007fbec17e2000)
    libxcb-glx.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0 (0x00007fbec15cb000)
    libxcb-dri2.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-dri2.so.0 (0x00007fbec13c6000)
    libxcb-dri3.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0 (0x00007fbec11c3000)
    libxcb-present.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-present.so.0 (0x00007fbec0fc0000)
    libxcb-sync.so.1 => /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1 (0x00007fbec0dba000)
    libxshmfence.so.1 => /usr/lib/x86_64-linux-gnu/libxshmfence.so.1 (0x00007fbec0bb8000)
    libXxf86vm.so.1 => /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1 (0x00007fbec09b2000)
    libdrm.so.2 => /usr/lib/x86_64-linux-gnu/libdrm.so.2 (0x00007fbec07a3000)
    libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007fbec059f000)
    libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fbec0399000)


    Citation Envoyé par Neoflash Okashi Voir le message
    P.S. : Il m'a aussi demandé les "instruction de compilation". J'imagine qu'il parle des commandes du genre "g++ -c -pipe -fno-keep-inline-dllexport -O2 -std=c++0x -frtti -Wall etc" pour compiler lui-même les sources.
    En effet, mais il faudra alors qu'il récupère toutes les sources de Qt juste pour compiler le programme.
    Le plus simple pour lui est de récupérer les libs requises comme indiqué ci-dessus.
    C'est de toutes façons ce que font tous les installateurs de logiciel (les setup.exe), sauf qu'ici tu le fera manuellement.
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un chat / clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  3. #3
    Membre habitué
    Excellent, merci beaucoup !

    Pour ceux qui passeraient voir ça, voici ce que j'ai fait :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    objdump -p /path/to/program | grep NEEDED

    (commande conseillée par le manuel de ldd, à la place de ldd)
    (il faut bien évidemment remplacer /path/to/program par l'emplacement de l'exécutable donc vous voulez avoir les dépendances)
    Ce qui m'a affiche :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      NEEDED               libQt5Widgets.so.5
      NEEDED               libQt5Gui.so.5
      NEEDED               libQt5Core.so.5
      NEEDED               libstdc++.so.6
      NEEDED               libgcc_s.so.1
      NEEDED               libc.so.6

    Vous récupérez donc les noms des bibliothèques, vous retirez le .so. (ce qui dans monc as donne libQt5Widgets5, libQt5Gui5, etc) et vous obtenez la liste des paquets que l'utilisateur doit installer via apt-get ou tout autre gestionnaire de paquets.

    Tadaa !
    Les pointeurs intelligents, c'est mignon mais trop long à écrire.

###raw>template_hook.ano_emploi###