Partage
  • Partager sur Facebook
  • Partager sur Twitter

Inclure les dépendances à la compilation

Inclure les bibliothèques à la compilation

Sujet résolu
    28 juin 2023 à 23:44:42

    Bonsoir, je suis sous ubuntu, je code avec qt creator, j'ai fais un programme GUI, mais après la compilation si je lance le programme dans un autre pc il me dit que les bibliothèques de qt manquent.

    Comment faire pour inclure automatiquement les bibliothèques nécessaires au lancement du programme pendant la compilation ?

    Merci

    -
    Edité par Love For All 28 juin 2023 à 23:45:37

    • Partager sur Facebook
    • Partager sur Twitter
      29 juin 2023 à 0:09:20

      Il faut fournir les libs avec ton programme. Le plus simple est d'utiliser l'outil windeployqt https://doc.qt.io/qt-6/windows-deployment.html

      (Il est possible d'utiliser aussi les links statiques, mais c'est pas conseillé)

      • Partager sur Facebook
      • Partager sur Twitter
        29 juin 2023 à 7:21:08

        Sous Ubuntu, le mieux c'est de faire un paquet  avec indication des dépendances à installer.

        https://doc.ubuntu-fr.org/tutoriel/creer_un_paquet

        -
        Edité par michelbillaud 29 juin 2023 à 7:24:12

        • Partager sur Facebook
        • Partager sur Twitter
          29 juin 2023 à 10:20:40

          gbdivers a écrit:

          Il faut fournir les libs avec ton programme. Le plus simple est d'utiliser l'outil windeployqt https://doc.qt.io/qt-6/windows-deployment.html

          (Il est possible d'utiliser aussi les links statiques, mais c'est pas conseillé)


          Merci pour votre réponse, ça c'est pour windows, y'a t'il pour Ubuntu ?

          michelbillaud a écrit:

          Sous Ubuntu, le mieux c'est de faire un paquet  avec indication des dépendances à installer.

          https://doc.ubuntu-fr.org/tutoriel/creer_un_paquet

          -
          Edité par michelbillaud il y a environ 1 heure

          y'a juste ce moyen ? je veux que mon programme soit indépendant. 



          -
          Edité par Love For All 29 juin 2023 à 10:21:38

          • Partager sur Facebook
          • Partager sur Twitter
            29 juin 2023 à 10:26:23

            > y'a juste ce moyen ? je veux que mon programme soit indépendant.

            Indépendant de quoi ? Si il doit tourner sur n'importe quelle machine/système, il faut distribuer le source.

            • Partager sur Facebook
            • Partager sur Twitter
              29 juin 2023 à 11:45:04

              michelbillaud a écrit:

              > y'a juste ce moyen ? je veux que mon programme soit indépendant.

              Indépendant de quoi ? Si il doit tourner sur n'importe quelle machine/système, il faut distribuer le source.


              Par exemple en python, il intègre les librairies avec le fichier exécutable. donc il peut tourner sur n'importe qu'elle pc sans à se soucier d'installer les dépendances.
              • Partager sur Facebook
              • Partager sur Twitter
                29 juin 2023 à 12:21:39

                même quand on fait passer sur mac, ou un raspberry, sans y avoir installé python préalablement ?
                • Partager sur Facebook
                • Partager sur Twitter
                  29 juin 2023 à 12:49:31

                  Love For All a écrit:

                  michelbillaud a écrit:

                  > y'a juste ce moyen ? je veux que mon programme soit indépendant.

                  Indépendant de quoi ? Si il doit tourner sur n'importe quelle machine/système, il faut distribuer le source.


                  Par exemple en python, il intègre les librairies avec le fichier exécutable. donc il peut tourner sur n'importe qu'elle pc sans à se soucier d'installer les dépendances.


                  Non. Sur certains systèmes c'est le gestionnaire de paquets qui installent les dépendances (peu importe le langage), ça dépend comment le système fait et ça varie beaucoup d'un système à l'autre :

                  • Windows : on intègre tout parce que c'est globalement comme ça depuis le début
                  • macOS : certains font des .pkg/.dmg qui contiennent les dépendances et d'autres utilisent pip et/ou brew qui installent les dépendances et les partage avec les autres applications
                  • linux, BSD et la plupart des unix : on installe les dépendances avec le gestionnaire de paquets, ces derniers étant faits par des packagers externes. Note : la mode est à flatpak qui a pour but d'avoir une approche type “bundle”. Il y a des avantages et inconvénients, néanmoins l'utilisation de flatpak ne fait pas l'unanimité.

                  Dans tous les cas pour une application qui a besoin de code natif c'est barbant car tu dois avoir accès à un système hôte pour compiler pour la plateforme. On peut aussi cross-compiler mais ça reste marginal et pas toujours faisable. Les langages interprétés sont un poil plus simple car tu n'as pas à compiler pour chaque plateforme mais la distribution du produit final reste différent pour chacun (.msi, .exe, .pkg, .dmg, etc).

                  • Partager sur Facebook
                  • Partager sur Twitter

                  git is great because Linus did it, mercurial is better because he didn't.

                    29 juin 2023 à 17:45:20

                    Love For All a écrit:

                    ça c'est pour windows, y'a t'il pour Ubuntu ?

                    Effectivement, je n'avais pas fait attention. Non. Il faut faire comme dit michelbillaud. Il existe d'autres solutions, mais trop complique a mettre en place.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      29 juin 2023 à 18:37:00

                      C'est moins propre que de faire un beau paquet bien emballé, mais c'est pas compliqué de donner un fichier README avec les lignes

                      # pour installer les paquets nécessaires, tapez
                      
                      sudo apt update
                      
                      sudo apt install qt-machin qt-truc python-bidule
                      
                      
                      



                      -
                      Edité par michelbillaud 29 juin 2023 à 18:38:56

                      • Partager sur Facebook
                      • Partager sur Twitter
                        1 juillet 2023 à 12:37:53

                        y'a t'il une ligne de commande pour savoir les descendances de mon exécutable et les convertir en : 

                        Depends: libc6, libcrypto++8, libqt6widgets5, libqt6gui5 ... etc


                        Pour créer un paquet .deb, il faut préciser les dépendances.

                        -
                        Edité par Love For All 1 juillet 2023 à 12:38:26

                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 juillet 2023 à 10:15:30

                          La commande ldd permet de savoir quelles sont les bibliothèques dynamiques nécessaires à un exécutable, en principe on pourrait remonter aux paquets en cherchant qui les fournit dans  /var/lib/dpkg/info/*.list

                          Sinon, comme on a les sources, on peut se demander de quoi on a besoin

                          • si c'est du C++, il faut la bibliotheque pour c++
                          • pareil pour qt
                          en regardant dans /var/lib/dpkg on trouve(sur Debian)

                          # ls /var/lib/dpkg/info/libqt6*.list
                          /var/lib/dpkg/info/libqt6concurrent6:amd64.list
                          /var/lib/dpkg/info/libqt6core5compat6:amd64.list
                          /var/lib/dpkg/info/libqt6core6:amd64.list
                          /var/lib/dpkg/info/libqt6dbus6:amd64.list
                          /var/lib/dpkg/info/libqt6designer6:amd64.list
                          /var/lib/dpkg/info/libqt6designercomponents6:amd64.list
                          /var/lib/dpkg/info/libqt6gui6:amd64.list
                          /var/lib/dpkg/info/libqt6help6:amd64.list
                          /var/lib/dpkg/info/libqt6jsonrpc6:amd64.list
                          /var/lib/dpkg/info/libqt6languageserver6:amd64.list
                          /var/lib/dpkg/info/libqt6network6:amd64.list
                          /var/lib/dpkg/info/libqt6opengl6:amd64.list
                          /var/lib/dpkg/info/libqt6openglwidgets6:amd64.list
                          /var/lib/dpkg/info/libqt6printsupport6:amd64.list
                          /var/lib/dpkg/info/libqt6qml6:amd64.list
                          /var/lib/dpkg/info/libqt6qmlcompiler6:amd64.list
                          /var/lib/dpkg/info/libqt6qmlmodels6:amd64.list
                          /var/lib/dpkg/info/libqt6qmlworkerscript6:amd64.list
                          /var/lib/dpkg/info/libqt6quick3d6:amd64.list
                          /var/lib/dpkg/info/libqt6quick3dassetimport6:amd64.list
                          /var/lib/dpkg/info/libqt6quick3dassetutils6:amd64.list
                          /var/lib/dpkg/info/libqt6quick3dparticles6:amd64.list
                          /var/lib/dpkg/info/libqt6quick3druntimerender6:amd64.list
                          /var/lib/dpkg/info/libqt6quick3dutils6:amd64.list
                          /var/lib/dpkg/info/libqt6quick6:amd64.list
                          /var/lib/dpkg/info/libqt6quickcontrols2-6:amd64.list
                          /var/lib/dpkg/info/libqt6quickcontrols2impl6:amd64.list
                          /var/lib/dpkg/info/libqt6quicklayouts6:amd64.list
                          /var/lib/dpkg/info/libqt6quicktemplates2-6:amd64.list
                          /var/lib/dpkg/info/libqt6quicktest6:amd64.list
                          /var/lib/dpkg/info/libqt6quicktimeline6:amd64.list
                          /var/lib/dpkg/info/libqt6quickwidgets6:amd64.list
                          /var/lib/dpkg/info/libqt6serialport6:amd64.list
                          /var/lib/dpkg/info/libqt6shadertools6:amd64.list
                          /var/lib/dpkg/info/libqt6sql6:amd64.list
                          /var/lib/dpkg/info/libqt6sql6-sqlite:amd64.list
                          /var/lib/dpkg/info/libqt6svg6:amd64.list
                          /var/lib/dpkg/info/libqt6svgwidgets6:amd64.list
                          /var/lib/dpkg/info/libqt6test6:amd64.list
                          /var/lib/dpkg/info/libqt6uitools6:amd64.list
                          /var/lib/dpkg/info/libqt6widgets6:amd64.list
                          /var/lib/dpkg/info/libqt6xml6:amd64.list
                          


                          Ca donne une idée. Mettre les noms des paquets de plus haut niveau, ils feront venir leurs dépendances. libqt6gui6 ?
                          Bon, de toutes façons, si on veut faire ça sérieusement, il faudra tester l'installation sur une machine virtuelle ubuntu minimaliste. Si ça marche pas, on voit quels paquets manquent.

                          -
                          Edité par michelbillaud 2 juillet 2023 à 10:17:29

                          • Partager sur Facebook
                          • Partager sur Twitter
                            2 juillet 2023 à 15:32:03

                            Qt utilise aussi des plugins, qui sont chargés dynamiquement et donc n'apparaissent pas avec ldd. Il faut regarder la doc de Qt https://doc.qt.io/qt-6/deployment.html
                            • Partager sur Facebook
                            • Partager sur Twitter
                              11 juillet 2023 à 12:27:53

                              J'ai trouvé une solution qui inclut les dépendances et crée un fichier indépendant, c'est l'AppImage :
                              https://github.com/probonopd/linuxdeployqt
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Inclure les dépendances à la compilation

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown