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 ?
> 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.
> 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).
git is great because Linus did it, mercurial is better because he didn't.
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.
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)
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
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
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
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.
Discord NaN. Mon site.
git is great because Linus did it, mercurial is better because he didn't.
Discord NaN. Mon site.
Discord NaN. Mon site.