1. Installer Qt5.15.2, installer Poppler et le driver MySQL sous Mac OSX
3. Installer poppler
Il faut d'abord installer homebrew, gestionnaires de paquets pour MacOS pour cela, dans le terminal du Mac, exécuter la commande
Pour l’utiliser dans Qt5, ajouter dans le fichier .pro : OSX { INCLUDEPATH += /usr/local/opt/poppler-qt5/include/poppler/qt5 LIBS += -L/usr/local/opt/poppler-qt5/lib/ -lpoppler-qt5 }
4. Compiler le driver MySQL (inutile si la version de Qt est antérieure à Qt 5.10)
Pour compiler le driver MySQL, se rendre dans le dossier où se situent les sources des drivers SQL -> ~/Qt/5.15.2/Src/qtbase/src/plugins/sqldrivers
|
2. Créer un executable Rufus.dmg, à partir de la compilation sous mac - Install_name_tool et macdeployqt
Bravo! Vous avez enfin réussi à compiler Rufus, qui marche parfaitement bien. Seulement voilà, quand vous copiez votre programme Rufus sur un autre Mac, ça ne marche pas. C'est normal, tout n'est pas fini. Rufus a en effet besoin de librairies pour fonctionner parfaitement, librairies qu'il va chercher un peu partout sur le disque dur de votre ordinateur et s'il ne les trouve pas, il ne démarre pas. Une des libraires sert à communiquer avec la base de données MySQL, une autre, poppler, à afficher les documents pdf (courriers, ordonnances). Il faut donc incorporer ces librairies dans le programme pour pouvoir réaliser un package Rufus.dmg totalement autonome, que vous pourrez installer sur n'importe quel Mac. On va donc avoir besoin d'un premier outil, Macdeployqt, fourni dans le package Qt, et se trouvant dans le répertoire /Users/votrenomdutilisateur/Qt/5.10/clang_64/bin de votre Mac. Macdeployqt gère l'incorporation des librairies indispensables au fonctionnement du logiciel dans le package. Ces librairies ont parfois besoin elles-mêmes d'autres librairies que macdeployqt va donc aussi incorporer. A - Dans un premier temps, après avoir compilé le programme dans le dossier Applications du Mac, il vous faut retirer du package Qt les librairies SQL qui vont entraver le déploiement de Rufus. Pour cela, dans le dossier /Users/votrenomdutilisateur/Qt/5.10/clang_64/plugins/sqldrivers retirez toutes les librairies sql qui ne sont pas dédiées à mysql (dont le nom ne contient pas mysql) c'est à dire les libraires obdc, sqllite et sqlpsql. Puis, dans le terminal, taper la commande macdeployqt /Applications/Rufus.App Ce qui aura pour effet d'incorporer dans le package Rufus, tout un tas de librairies essentielles à son fonctionnement, en créant 2 sous-dossiers dans le dossier Rufus/Contents/, le dossier Frameworks et le dossier Plugins. Pour voir le contenu du package Rufus -> clic droit sur le nom du programme dans le Finder et choisir "Afficher le contenu du paquet" B - Enfin, macdeployqt fait parfois quelques erreurs et conserve les liens de recherche des librairies secondaires vers leur emplacement sur le disque dur de l'ordinateur hôte et pas vers leur emplacement dans le package. Sur un poste développeur, cela ne pose pas de problème puisque ces librairies sont en général placées au bon endroit par les langages de développement au moment de leur installation mais sur un poste naïf qui n'héberge pas ces librairies secondaires, le programme ne fonctionnera pas, les librairies primaires continuant à chercher les secondaires sur le disque dur de l'ordinateur hôte et pas dans le package. install_name_tool est un outil logiciel fourni avec Xcode qui permet de gérer les dépendances entre librairies et de corriger les liens erronés utilisés par macdeployqt dans le package d'installation du logiciel. Exemple, dans le terminal, la commande otool (otool est l'utilitaire qui permet de visualiser les liens des librairies) suivante otool -L /applications/rufus.app/Contents/Plugins/sqldrivers/libqsqlmysql.dylib affiche la liste des dépendances de la libraire libqsqlmysql.dylib située dans /applications/rufus.app/Contents/Plugins/sqldrivers |
/applications/rufus.app/Contents/Plugins/sqldrivers/libqsqlmysql.dylib:
@executable_path/../Plugins/sqldrivers/libqsqlmysql.dylib (compatibility version 0.0.0, current version 0.0.0) @rpath/QtSql.framework/Versions/5/QtSql (compatibility version 5.10.0, current version 5.10.0) @rpath/QtCore.framework/Versions/5/QtCore (compatibility version 5.10.0, current version 5.10.0) /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0) /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0) /opt/local/lib/mysql55/mysql/libmysqlclient.18.dylib (compatibility version 20.0.0, current version 20.0.0) /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5) /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1) |
on voit que la lib libmysqlclient.18.dylib est directement linkée sur le disque dur du poste vers le chemin /opt/local/lib/mysql55/mysql/ et non dans le package. Le programme ne démarrera donc pas si ce fichier n'existe pas à cet emplacement là (ce qui bien sûr n'arrive jamais, sauf si vous l'y avez expressément copié), même s'il est pourtant présent dans le package.
+++ les chemins /usr/lib et /System/Library/ sont des chemins protégés du mac et contiennent toujours les lib demandées par le package. Il ne faut pas en tenir compte. Il faut donc faire la manip otool pour chaque lib contenue dans le package et corriger les erreurs de liens pour chacune. Pour Rufus, cette erreur peut se produire pour : . les dépendances de libs contenues dans rufus/Contents/Frameworks, à savoir freetype, libpoppler-qt5.1.dylib et libopenjp2, libmysqlclient.20.dylib. . la dépendance de libsqlmysql.dylib, contenue dans rufus/Contents/Plugins/sqldrivers
Ces dépendances sont bien installées dans le package mais sont linkées sur le disque dur. Exemple: la lib libmysqlclient.18.dylib est correctement placée par mqcdeployqt dans le dossier rufus/Contents/Frameworks mais n'est donc pas appelée correctement par libsqlmysql.dylib qui la cherche sur le disque dur de la machine à /opt/local/lib/mysql55/mysql/.Le programme install_tool_name va donc permettre de corriger ça. La manip se déroule en 2 temps |
La commande est install_name_tool -id @executable_path/../Frameworks/libmysqlclient.18.dylib /Applications/Rufus.app/Contents/Frameworks/libmysqlclient.18.dylib
doit être remplacé par /Applications/Rufus.app/Contents/Plugins/sqldrivers/libqsqlmysql.dylib pour @executable_path/../Frameworks/libmysqlclient.18.dylib On utilise le modificateur -change et la commande est install_name_tool -change /opt/local/lib/mysql55/mysql/libmysqlclient.18.dylib @executable_path/../Frameworks/libmysqlclient.18.dylib /Applications/Rufus.app/Contents/PlugIns/sqldrivers/libqsqlmysql.dylib C - Bien, à partir de là, votre package fonctionne et est autonome. Il ne reste plus qu'à en générer une forme comprimée et autoinstallable, le fichier Rufus.dmg C'est la partie la plus simple de ce chapitre. Il suffit maintenant de taper dans le Terminal, la commande macdeployqt /Applications/Rufus.App -dmg Si vous avez bien suivi toute cette fastidieuse manip, le fichier rufus.dmg que vous venez de générer peut installer Rufus sur n'importe quel Mac sans installation préalable de quoi que ce soit |
3. Installer Qt 5.12.8, Poppler et le driver MySQL sous Linux Ubuntu
1. installer Qt5.12.8 et le compilateur c++
- 1. avec l'installateur (avec un pc intel ou amd ou un mac)
- Ouvrir le terminal
- Il faut en premier lieu mettre à jour les dépôts
- sudo apt-get update
- puis
- sudo apt-get upgrade
- puis installer les compilateurs C et C++ la librairie libxcb-xinerama0 sans laquelle l'installateur de Qt ne peut pas se lancer
- sudo apt-get install build-essential libgl1-mesa-dev libxcb-xinerama0
- puis télécharger l'installateur online de Qt à la page
www.qt.io/download-open-source?hsCtaTracking=e9c17691-91a0-4616-9bc2-1a6a6c318914%7C963686f8-2c68-442a-b17b-3d73ce95b819
L'adressse peut varier en fonction des saisons
Taper Download Qt Online Installer dans le moteur de recherche si ça ne marche pas
Lancer l'installeur que vous venez de télécharger (un nom ressemblant à qt-unified-linux-x64-4.5.1-online.run - ne pas oublier d'autoriser l'éxécution du fichier comme un programme -> clic droit sur le nom du fichier - onglet Permissions - cocher la case autoriser l'éxécution du fichier comme un programme) et, si ce n'est pas déjà fait, créer un compte Qt sinon vous ne pourrez pas aller plus loin.
Dans l'installateur, choisir installation personnalisée et cocher la case Sources et aussi toutes les cases cochées sur la capture d'écran ci-dessous
- 2. Qt en ligne de commande (avec un raspberry)
- dans le terminal
sudo apt-get install qtmultimedia5-dev libqt5multimediawidgets5 libqt5multimedia5-plugins libqt5multimedia5 libqt5serialport5-dev (ces libs permettent l'affichage de videos et la gestion des ports séries indispensables à la connection des appareils de réfraction)
2. Installer Poppler d'après cette page
- Il faut maintenant installer Poppler
- Toujours dans le terminal
- puis
- le fichier est téléchargé dans le dossier d'où vous avez lancé la commande
- Décomprimer
- Entrer dans le dossier
- puis
- retour au dossier parent
- Téléchargement du paquet principal
- Extraction
- Entrer dans le dossier
- lancer le configure
- si tout s'est bien passé, continuez avec
- puis
- créer les liens symboliques vers le dossier /usr/local/lib
- installer poppler pour Qt5
3 . Installer le driver MySQL pour Qt 5.12.8
Il faut rexopier cette lib dans le dossier ~/Qt/5.12.8/gcc_64/plugins/sqldrivers
- sudo apt install libmysqlclient21
- sudo apt install libmysqlclient-dev
- sudo apt-get install libqt5sql5-mysql
Il faut rexopier cette lib dans le dossier ~/Qt/5.12.8/gcc_64/plugins/sqldrivers
- cp /usr/lib/x86_64-linux-gnu/qt5/plugins/sqldrivers/libqsqlmysql.so ~/Qt/5.12.8/gcc_64/plugins/sqldrivers
4. cannot find -lpulse - uniquement sur un pc classique ou un mac sous Ubuntu
sudo ln -s /usr/lib/x86_64-linux-gnu/libpulse-mainloop-glib.so.0 /usr/lib/x86_64-linux-gnu/libpulse-mainloop-glib.so
sudo ln -s /usr/lib/x86_64-linux-gnu/libpulse-mainloop-glib.so.0 /usr/lib/arm-linux-gnueabihf/libpulse-mainloop-glib.so
5. installer Zeal (facultatif)
6. installer capture d'écran sur raspberry (facultatif)
- Il arrive que le compilateur bloque parce qu'il ne trouve pas certaines librairies
- Cela arrive par exemple pour la librairie libpulse
- Une version de cette librairie se trouve dans /usr/lib/x86_64-linux-gnu sous le nom libpulse.so.0
- Si on tape la commande
- On retrouve la liste des noms et des dossiers où cette librairie est recherchée et /usr/lib/x86_64-linux-gnu/libpulse.so.0 n'y figure pas
- Il faut donc créer un nouveau lien symbolique pour cette lib et une autre lib, libpulse-mainloop-glib, avec les lignes suivantes
- sur un ordinateur x86
sudo ln -s /usr/lib/x86_64-linux-gnu/libpulse-mainloop-glib.so.0 /usr/lib/x86_64-linux-gnu/libpulse-mainloop-glib.so
- sur un raspberry et une version 32 bits d'Ubuntu
sudo ln -s /usr/lib/x86_64-linux-gnu/libpulse-mainloop-glib.so.0 /usr/lib/arm-linux-gnueabihf/libpulse-mainloop-glib.so
5. installer Zeal (facultatif)
- Zeal est un utilitaire quasi-indispensable pour le développeur qui vous permet d'accéder off-lin à toutes les documentations des outils de développement les plus répandus, y compris Qt, C++ et MySQL.
6. installer capture d'écran sur raspberry (facultatif)
- screen shooter est un utilitaire permettant de faire des captures d'écran.
4. Créer un exécutable Rufus.Appimage, à partir de la compilation sous Ubuntu 18.04 - linuxdeployqt
++++ Linuxdeployqt est développé pour pouvoir produire des appimage éxécutables sur des machines sous Ubuntu 18.04 LTS.
Linuxdeployqt refusera de fonctionner sur une machine sous 20.04 ou 22.04 parce que les appimage produites utiliseraient des libs récentes et refuseraient de marcher sous 18.04.
Le but est de pouvoir permettre à des utilisateurs ne disposant pas de machines capables de faire tourner les versions postérieures d'Ubuntu de faire quand même marcher les appimages. Bien sûr, les appimages générées par linuxdeployqt seront à même de tourner sous les versions ultérieures d'Ubuntu. Cette intention louable évite aussi le piège de l'évolution à tout prix, surtout quand elle ne sert à rien, comme c'est le cas pour un programme de gestion de base de données tel que Rufus. Linuxdeployqt nécessite donc une machine fonctionnant sous la plus ancienne version supportéée d'Ubuntu. Au 1er juin 2022, il s'agit de la version 18.04. Pour créer une appimage avec linuxdeployqt
il vous faut donc impérativement une machine tournant sous Ubuntu 18.04LTS si vous voulez que les appimage génbérées tournent sous Ubuntu 18.04 |
"A note on binary compatibility
To produce binaries that are compatible with many target systems, build on the oldest still-supported build system. The oldest still-supported release of Ubuntu is currently targeted, tested and supported by the team. We recommend to target the oldest still-supported Ubuntu LTS release and build your applications on that. If you do this, the resulting binaries should be able to run on newer (but not older) systems (Ubuntu and other distributions). We do not support linuxdeployqt on systems newer than the oldest Ubuntu LTS release, because we want to encourage developers to build applications in a way that makes them possible to run on all still-supported distribution releases. " depuis la page github du projet linuxdeployqt github.com/probonopd/linuxdeployqt#a-note-on-binary-compatibility |
Bravo! Vous vous êtes bien battu avec Ubuntu, Qt, MySQL et Poppler et vous avez enfin réussi à compiler Rufus, qui marche parfaitement bien.
Seulement voilà, ça ne marche que si vous le lancez depuis Qt. Le fichier RufusApp généré par Qt refuse de démarrer seul.
Il va donc vous falloir un programme autonome, à partir de ce fichier.
C'est normal, tout n'est pas fini.
Rufus a en effet besoin de librairies pour fonctionner parfaitement, librairies qu'il va chercher un peu partout sur le disque dur de votre ordinateur et s'il ne les trouve pas, il ne démarre pas.
Une des libraires sert à communiquer avec la base de données MySQL, une autre, poppler, à afficher les documents pdf (courriers, ordonnances).
Il faut donc incorporer ces librairies dans le programme pour pouvoir réaliser un package Rufus.Appimage totalement autonome, que vous pourrez installer sur n'importe quel poste Ubuntu.
On va donc avoir besoin d'un outil, linuxdeployqt, que vous pouvez télécharger en cliquant sur ce lien.
Linuxdeployqt est hébergé sur GitHub à cette adresse. On utilise en l'occurence la version 5 du programme, les versions suivantes pouvant poser des problèmes de compatibilité avec Ubuntu 18,04 et Qt 5.9.
Linuxdeployqt gère l'incorporation des librairies indispensables au fonctionnement du logiciel dans le package.
Pour pouvoir lancer linuxdeployqt, il faut rendre le programme exécutable. Pour cela, une fois que linuxdeployqt a été téléchargé, clic droit sur l'icône du programme, choisir propriétés, puis onglet Permissions et cocher la case Autoriser l'exécution du fichier comme un programme.
A - Dans un premier temps, après avoir compilé le programme dans le dossier Applications du Mac, il vous faut créer un dossier qui sera dédié à cette tâche dans cet exemple le dossier /home/usermachin/DeployRufus
Puis, il faut réunir dans ce dossier le fichier RufusApp généré par Rufus et les 2 fichiers rufus.desktop et rufus.png que vous aurez téléchargé.
B - Modifier la variable PATH pour que linuxdeployqt trouve l'executable qmake
sudo nano /home/usermachin/.profile
rajouter la ligne en fin de fichier
export PATH=/usr/lib/x86_64-linux-gnu:/usr/local/lib:/home/usermachin/Qt/5.9.9/gcc_64/lib:/home/usermachin/Qt/5.9.9/gcc_64/bin:$PATH
Validez par Ctrl-X puis O
puis, pour que les modifications soient prises en compte immédiatement,
source /home/usermachin/.profile
C - Supprimer les drivers sql inutiles
Dans le dossier /home/usermachin/Qt/5.9.9/gcc_64/plugins/sqldrivers
suprimer tous les fichiers qui ne contiennent pas mysql dans leur nom et ne garder donc que
D - Ensuite ouvrir le terminal et taper la commande
cheminverslinuxdeployqt cheminversRufusApp - appimage
ce qui donne, si votre terminal vous a placé dans votre dossier personnel et que linuxdepployqt est dans ce dossier et RufusApp, rufus.desktop et rufus.png dans un sous dossier DeployRufus
./linuxdeployqt-5-x86_64.AppImage ./DeployRufus/RufusApp -appimage
Vous pouvez maintenant relancer le programme qui va travailler quelques minutes et finir par créer l'appimage, dans votre dossier personnel.
E - Pour Qt6, la démarche est la même mais vous devez utiliser la dernière version de linuxdeployqt, à savoir ./linuxdeployqt-continuous-x86_64.AppImage
Seulement voilà, ça ne marche que si vous le lancez depuis Qt. Le fichier RufusApp généré par Qt refuse de démarrer seul.
Il va donc vous falloir un programme autonome, à partir de ce fichier.
C'est normal, tout n'est pas fini.
Rufus a en effet besoin de librairies pour fonctionner parfaitement, librairies qu'il va chercher un peu partout sur le disque dur de votre ordinateur et s'il ne les trouve pas, il ne démarre pas.
Une des libraires sert à communiquer avec la base de données MySQL, une autre, poppler, à afficher les documents pdf (courriers, ordonnances).
Il faut donc incorporer ces librairies dans le programme pour pouvoir réaliser un package Rufus.Appimage totalement autonome, que vous pourrez installer sur n'importe quel poste Ubuntu.
On va donc avoir besoin d'un outil, linuxdeployqt, que vous pouvez télécharger en cliquant sur ce lien.
Linuxdeployqt est hébergé sur GitHub à cette adresse. On utilise en l'occurence la version 5 du programme, les versions suivantes pouvant poser des problèmes de compatibilité avec Ubuntu 18,04 et Qt 5.9.
Linuxdeployqt gère l'incorporation des librairies indispensables au fonctionnement du logiciel dans le package.
Pour pouvoir lancer linuxdeployqt, il faut rendre le programme exécutable. Pour cela, une fois que linuxdeployqt a été téléchargé, clic droit sur l'icône du programme, choisir propriétés, puis onglet Permissions et cocher la case Autoriser l'exécution du fichier comme un programme.
A - Dans un premier temps, après avoir compilé le programme dans le dossier Applications du Mac, il vous faut créer un dossier qui sera dédié à cette tâche dans cet exemple le dossier /home/usermachin/DeployRufus
Puis, il faut réunir dans ce dossier le fichier RufusApp généré par Rufus et les 2 fichiers rufus.desktop et rufus.png que vous aurez téléchargé.
B - Modifier la variable PATH pour que linuxdeployqt trouve l'executable qmake
sudo nano /home/usermachin/.profile
rajouter la ligne en fin de fichier
export PATH=/usr/lib/x86_64-linux-gnu:/usr/local/lib:/home/usermachin/Qt/5.9.9/gcc_64/lib:/home/usermachin/Qt/5.9.9/gcc_64/bin:$PATH
Validez par Ctrl-X puis O
puis, pour que les modifications soient prises en compte immédiatement,
source /home/usermachin/.profile
C - Supprimer les drivers sql inutiles
Dans le dossier /home/usermachin/Qt/5.9.9/gcc_64/plugins/sqldrivers
suprimer tous les fichiers qui ne contiennent pas mysql dans leur nom et ne garder donc que
- liqsqlmysql.so
- qsqlmysql.debug
D - Ensuite ouvrir le terminal et taper la commande
cheminverslinuxdeployqt cheminversRufusApp - appimage
ce qui donne, si votre terminal vous a placé dans votre dossier personnel et que linuxdepployqt est dans ce dossier et RufusApp, rufus.desktop et rufus.png dans un sous dossier DeployRufus
./linuxdeployqt-5-x86_64.AppImage ./DeployRufus/RufusApp -appimage
Vous pouvez maintenant relancer le programme qui va travailler quelques minutes et finir par créer l'appimage, dans votre dossier personnel.
E - Pour Qt6, la démarche est la même mais vous devez utiliser la dernière version de linuxdeployqt, à savoir ./linuxdeployqt-continuous-x86_64.AppImage
5. Construire le driver MySQL pour Qt 5.15.2 sous Linux Ubuntu
Le moins qu'on puisse dire c'est que la documentation sur le site de Qt à ce sujet est succincte : remplie d'erreurs, sans la moindre explication et avec de nombreux oublis. Bref, proprement inutilisable. On ne s'est pas foulé chez Qt.
Sur le forums, c'est la même pagaille, entre ceux qui ont "trouvé" la solution sans comprendre pourquoi et dont la dite solution ne marche pas, les "sachants" qui vous expliquent que vous devez aller sur le site de Qt pour savoir, sans répondre pour autant à la question ou d'autres "sachants" qui vous expliquent que vous devez lire 2000 pages de manuel et qu'alors vous saurez le faire, sans non plus répondre à la question.
Le milieu de l'informatique ressembler furieusement de ce point de vue au milieu médical où bien des intervenants sont plus préoccupés d'asseoir leur position en essayant de vous convaincre que vous n'y arriverez jamais.
A force de fouiller, on finit quand même par trouver des gens disponibles qui ont pris le temps d'aider et, en faisant un mix de leurs réponses, on arrive à se débrouiller.
Bref, à force de bidouiller, j'ai fini par y arriver, sans comprendre parfaitement tout.
sudo ln -s libmysqlclient.so libmysqlclient_r.so
sudo ln -s libmysqlclient.so libmysqlclient_r.so.21.2.29
sudo ln -s libmysqlclient.so libmysqlclient_r.so.21
export QTDIR=/home/votrenomdutilisateur/Qt/5.15.2
Sur le forums, c'est la même pagaille, entre ceux qui ont "trouvé" la solution sans comprendre pourquoi et dont la dite solution ne marche pas, les "sachants" qui vous expliquent que vous devez aller sur le site de Qt pour savoir, sans répondre pour autant à la question ou d'autres "sachants" qui vous expliquent que vous devez lire 2000 pages de manuel et qu'alors vous saurez le faire, sans non plus répondre à la question.
Le milieu de l'informatique ressembler furieusement de ce point de vue au milieu médical où bien des intervenants sont plus préoccupés d'asseoir leur position en essayant de vous convaincre que vous n'y arriverez jamais.
A force de fouiller, on finit quand même par trouver des gens disponibles qui ont pris le temps d'aider et, en faisant un mix de leurs réponses, on arrive à se débrouiller.
Bref, à force de bidouiller, j'ai fini par y arriver, sans comprendre parfaitement tout.
- Ouvrir le terminal
- Se rendre dans le dossier des libs MySQL (libmysqlclient.so) et créer des liens symboliques (un lien symbolique est un fichier qui renvoie vers un autre fichier) vers ces bibliothèques. Les versions des ces bibliothèques peuvent varier. En tenir compte pour les 2 dernières lignes.
sudo ln -s libmysqlclient.so libmysqlclient_r.so
sudo ln -s libmysqlclient.so libmysqlclient_r.so.21.2.29
sudo ln -s libmysqlclient.so libmysqlclient_r.so.21
- Ajouter le chemin vers le dossier des libs MySQL à la variable d'environnement et créer la variable QTDIR pour indiquer le raccourci vers le dossier de Qt (N.B.: on peut ajouter ces 2 lignes à la fin du fichier /home/votrenomdutilisateur/.profile pour ne pas avoir à les retaper à chaque fois)
export QTDIR=/home/votrenomdutilisateur/Qt/5.15.2
- Se rendre dans le dossier de Qt où se trouvent les codes sources des drivers sql
Supprimer les traces d'éventuelles tentatives avortées de compilation (il est possible de le faire bien plus simplement depuis l'interface graphique du gestionnaire de fichiers à condition d'afficher les fichiers cachés - menu options d'affichage -> cocher la case afficher les fichiers cachés)
sudo rm config.cache
sudo rm -f ./.moc/* sudo rm -f ./.pch/*
|
La compilation peut maintenant commencer
- Exécuter qmake en lui indiquant l'emplacement du programme MySQL (MYSQL_INCDIR=) et celui des libs MySQL (MYSQL_LIBDIR=)
- Exécuter make en le limitant à l'élaboration du driver MySQL et en indiquant le chemin vers les libs MySQL
- Après un certain temps de pédalage, éxecuter make install
- Au bout de la procédure, vous devez normalement voir apparaître les libsmysql (libqsqlmysql.so et libqsqlmysql.so.debug) dans le dossier /home/votrenomdutilisateur/Qt/5.15.2/gcc_64/plugins/sqldrivers
6. Construire le driver MySQL pour Qt 6.4 sous MacOs Intel x64 - build MySQL driver QT6 MacOs intel x64
Comme d'habitude, tout cela est très mal expliqué dans la documentation de Qt, les gens de Qt considérant que vous êtes le petit prince de l'informatique et que vous saurez pallier les insuffisances de leurs explications.
Et que si, pour votre malheur, vous n'êtes pas ce petit prince, vous n'avez qu'à abandonner, parce que vous êtes trop stupide et l'informatique n'est pas faite pour vous.
Et que si, pour votre malheur, vous n'êtes pas ce petit prince, vous n'avez qu'à abandonner, parce que vous êtes trop stupide et l'informatique n'est pas faite pour vous.
Bon, ce coup de gueule posé, la compilation du driver n'est pas si complexe. Il vous faut installer Qt6.3 ou supérieur et les sources du logiciel par le biais du logiciel d'installation de Qt, MaintenanceTool. Donc, modifiez ou faites une installation neuve en cochant la case Sources du logiciel d'installation comme indiqué dans la capture d'écran ci contre
Il vous faut aussi installer CMake et Ninja en cochant les cases correspondantes (mais elles le sont normalement par défaut) |
On est loin d'avoir fini...
A - Télécharger Xcode sur l'Apple Store et l'installer
Vous devez maintenant créer un lien symbolique cmake dans le dossier /usr/local/bin vers le compilateur cmake que vous venez d'installer dans le dossier /Users/votrenomdutilisateur/Qt/Tools/CMake/CMake.app/Contents/bin
pour cela, dans le terminal, entrez les commandes suivantes
pour cela, rajouter de nouvelles valeurs à la variable EXPORT en entrant dans le terminal
A - Télécharger Xcode sur l'Apple Store et l'installer
Vous devez maintenant créer un lien symbolique cmake dans le dossier /usr/local/bin vers le compilateur cmake que vous venez d'installer dans le dossier /Users/votrenomdutilisateur/Qt/Tools/CMake/CMake.app/Contents/bin
pour cela, dans le terminal, entrez les commandes suivantes
- sudo mkdir /usr/local/bin
- sudo ln -s /Users/votrenomdutilisateur/Qt/Tools/CMake/CMake.app/Contents/bin/cmake /usr/local/bin/cmake
- sudo ln -s /Users/votrenomdutilisateur/Qt/Tools/Ninja/ninja /usr/local/bin/ninja
pour cela, rajouter de nouvelles valeurs à la variable EXPORT en entrant dans le terminal
- export PATH=$PATH:~/Qt/Tools/CMake/CMake.app/Contents/bin:~/Qt/6.4.x/macos/bin:~/Qt/6.4.x/macos/lib:~/Qt/Tools/Ninja
- Attention à entrer la bonne valeur du dossier Qt, ici /Qt/6.4.x, mais il faut remplacer par le véritable emplacement de votre dossier Qt qui varie selon la version que vous avez installée: /Qt/6.4.0, /Qt/6.4.1, /Qt/6.4.2...etc...
C - créer un sous répertoire du dossier personnel build-sqldrivers et s'y déplacer
mkdir build-sqldrivers
cd build-sqldrivers
D - lancer le make du driver SQL
qt-cmake -G Ninja ~/Qt/6.4.x/Src/qtbase/src/plugins/sqldrivers -DCMAKE_INSTALL_PREFIX=/Qt/6.4.x/macos -DMySQL_INCLUDE_DIR="/usr/local/mysql/include" -DMySQL_LIBRARY="/usr/local/mysql/lib/libmysqlclient.dylib"
Attention à entrer la bonne valeur du dossier Qt, ici /Qt/6.4.x, mais il faut remplacer par le véritable emplacement de votre dossier Qt qui varie selon la version que vous aves installé /Qt/6.4.0, /Qt/6.4.1, /Qt/6.4.2/Qt6.5.0...etc...
puis, à la fin de l'écran de compilation, vous devez voir apparaître les lignes
Qt Sql Drivers:
DB2 (IBM) .............................. no
InterBase .............................. no
MySql .................................... yes
OCI (Oracle) .......................... no
ODBC .................................... no
PostgreSQL ........................... no
SQLite ................................... yes
Using system provided SQLite ......... no
le "yes" en face de MySQL indique que le driver MySQL est prêt à être compilé
E - lancer les commandes build puis install
Elle sert simplement à copier les fichiers élaborés par la compilation à leur emplacement dans les répertoires de Qt correspondant.
Dans ce cas,
Voilà, c'était presque simple.
mkdir build-sqldrivers
cd build-sqldrivers
D - lancer le make du driver SQL
qt-cmake -G Ninja ~/Qt/6.4.x/Src/qtbase/src/plugins/sqldrivers -DCMAKE_INSTALL_PREFIX=/Qt/6.4.x/macos -DMySQL_INCLUDE_DIR="/usr/local/mysql/include" -DMySQL_LIBRARY="/usr/local/mysql/lib/libmysqlclient.dylib"
Attention à entrer la bonne valeur du dossier Qt, ici /Qt/6.4.x, mais il faut remplacer par le véritable emplacement de votre dossier Qt qui varie selon la version que vous aves installé /Qt/6.4.0, /Qt/6.4.1, /Qt/6.4.2/Qt6.5.0...etc...
puis, à la fin de l'écran de compilation, vous devez voir apparaître les lignes
Qt Sql Drivers:
DB2 (IBM) .............................. no
InterBase .............................. no
MySql .................................... yes
OCI (Oracle) .......................... no
ODBC .................................... no
PostgreSQL ........................... no
SQLite ................................... yes
Using system provided SQLite ......... no
le "yes" en face de MySQL indique que le driver MySQL est prêt à être compilé
E - lancer les commandes build puis install
- cmake --build .
- cmake --install .
Elle sert simplement à copier les fichiers élaborés par la compilation à leur emplacement dans les répertoires de Qt correspondant.
Dans ce cas,
- copier les libs contenues dans /Users/votrenomdutilisateur/build-sqldrivers/lib/cmake/Qt6Sql vers le dossier /Users/votrenomdutilisateur/Qt/6.4.x/macos/lib/cmake/Qt6Sql
- copier les libs contenues dans /Users/votrenomdutilisateur/build-sqldrivers/plugins/sqldrivers vers le dossier /Users/votrenomdutilisateur/Qt/6.4.x/macos/plugins/sqldrivers
Voilà, c'était presque simple.
7. Installer Qt6.4 et construire le driver MyQSL pour MariaDB sous Ubuntu - build MySQL/ MariaDB driver Qt6 Ubuntu
Il faut en premier lieu mettre à jour les dépôts
Dans le terminal
www.qt.io/download-open-source?hsCtaTracking=e9c17691-91a0-4616-9bc2-1a6a6c318914%7C963686f8-2c68-442a-b17b-3d73ce95b819
L'adressse peut varier en fonction des saisons
Taper Download Qt Online Installer dans le moteur de recherche si ça ne marche pas
Lancer l'installeur que vous venez de télécharger (un nom ressemblant à qt-unified-linux-x64-4.5.1-online.run - ne pas oublier d'autoriser l'éxécution du fichier comme un programme -> clic droit sur le nom du fichier - onglet Permissions - cocher la case autoriser l'éxécution du fichier comme un programme) et, si ce n'est pas déjà fait, créer un compte Qt sinon vous ne pourrez pas aller plus loin.
- sudo apt-get update
- sudo apt-get upgrade
Dans le terminal
- sudo apt-get install build-essential libgl1-mesa-dev libxcb-xinerama0
www.qt.io/download-open-source?hsCtaTracking=e9c17691-91a0-4616-9bc2-1a6a6c318914%7C963686f8-2c68-442a-b17b-3d73ce95b819
L'adressse peut varier en fonction des saisons
Taper Download Qt Online Installer dans le moteur de recherche si ça ne marche pas
Lancer l'installeur que vous venez de télécharger (un nom ressemblant à qt-unified-linux-x64-4.5.1-online.run - ne pas oublier d'autoriser l'éxécution du fichier comme un programme -> clic droit sur le nom du fichier - onglet Permissions - cocher la case autoriser l'éxécution du fichier comme un programme) et, si ce n'est pas déjà fait, créer un compte Qt sinon vous ne pourrez pas aller plus loin.
- +++ il est supposé que la version installée est une version 6.4.1 et que son emplacement est ~/Qt
- Corriger les lignes d'instruction en cas d'emplacement ou de version différents
- sudo apt-get install libmariadb-dev
- sudo nano ~/.profile
- export QTDIR=~/Qt/6.4.1
- export PATH=$PATH:~/Qt/Tools/CMake/bin:~/Qt/Tools/Ninja
- source ~/.profile
- mkdir build-sqldrivers
- cd ./build-sqldrivers
- $QTDIR/gcc_64/bin/qt-cmake -G Ninja $QTDIR/Src/qtbase/src/plugins/sqldrivers -DCMAKE_INSTALL_PREFIX=$QTDIR/gcc_64 -DMySQL_INCLUDE_DIR=/usr/include/mariadb -DMySQL_LIBRARY=/usr/lib/x86_64-linux-gnu/libmariadb.so
DMySQL_INCLUDE_DIR correspond au dossier où se trouvent les fichiers d'en-tête de MariaDB et notamment mysql.h (/usr/include/mariadb)
DMySQL_LIBRARY correspond à l'endroit où se trouve la lib libmariadb.so (/usr/lib/x86_64-linux-gnu/libmariadb.so)
Il ne vous reste plus qu'à faire (attention à l'espace suivi du petit point rouge à la fin de la ligne, il fait partie de la commande)
- cmake --build .
- cmake --install .
8. Installer Qt6.4 et construire le driver MariaDB pour Windows - build MySQL/MariaDB driver Qt6 Windows
Un jour, ça devait arriver. La version Windows de Rufus ne devrait plus tarder.
Je ne sais comment remercier Javier Rufas, développeur espagnol, dont la contribution désintéressée a permis de faire faire un pas de géant à Rufus avec un énorme travail : migration du code vers la version 6 de Qt et adaptation du code à Windows 10/11.
Le nouveau code, encore en phase de test est fonctionnel à 99% aujourd'hui.
On peut d'ores et déjà le télécharger sur le dépôt Github (branche Rufus Qt6 sur Github). Ce code est universel et marche donc dans les 3 environnements: MacOS, Ubuntu et Windows.
Il est écrit dans la déclinaison 6.4 de Qt et est donc différent de celui de la version actuellement diffusée. Le programme marche. Il persiste de petits détails de finition mais il fonctionne et est stable
Je ne sais comment remercier Javier Rufas, développeur espagnol, dont la contribution désintéressée a permis de faire faire un pas de géant à Rufus avec un énorme travail : migration du code vers la version 6 de Qt et adaptation du code à Windows 10/11.
Le nouveau code, encore en phase de test est fonctionnel à 99% aujourd'hui.
On peut d'ores et déjà le télécharger sur le dépôt Github (branche Rufus Qt6 sur Github). Ce code est universel et marche donc dans les 3 environnements: MacOS, Ubuntu et Windows.
Il est écrit dans la déclinaison 6.4 de Qt et est donc différent de celui de la version actuellement diffusée. Le programme marche. Il persiste de petits détails de finition mais il fonctionne et est stable
Pour compiler le driver MariaDB pour Qt6.4, il faut donc
A - Télécharger l'installateur online de Qt ici -> www.qt.io/download-qt-installer B - Installer Qt6.4.0 ou supérieur et choisir les options cochées sur la photo. Il faut aussi télécharger Ninja et Cmake comme c'est proposé par défaut tout en bas des propositions de l'installateur +++ choisir le compilateur MSVC et pas MinGW qui ne gère pas les PDF et ne fonctionnerait pas avec le code de Rufus Il faut donc compiler la librairie qsqlmysql.dll qui va permettre de faire communiquer le code de Qt avec les bases de données MySQL quelles qu'elles soient. Il y a, dans l'environnement Windows, 2 versions de cette librairie, suivant la compilation que l'on veut obtenir, release ou debug. C - Télécharger Visual Studio 2019. Après l'installation choisir seulement les outils de décveloppement pour C et C++ D - Télécharger mariaDB connector -> downloads.mariadb.com/Connectors/c/connector-c-3.3.4/mariadb-connector-c-3.3.4-win64.msi et l'installer mariaDB connector dans C:\Program Files\MariaDB\MariaDB Connector C 64-bit E - Lancer la console X64 Native Tools Command Prompt dans le menu Visual Studio et pas la ligne de commande |
F - dans le fichier C:\Qt\6.4.2\msvc2019_64\bin\qt-cmake.bat, modifier le chemin de cmake en le remplaçant par
pour la version release
puis, à la fin de l'écran de compilation, vous devez voir apparaître les lignes
Qt Sql Drivers:
DB2 (IBM) .............................. no
InterBase .............................. no
MySql .................................... yes
OCI (Oracle) .......................... no
ODBC .................................... no
PostgreSQL ........................... no
SQLite ................................... yes
Using system provided SQLite ......... no
le "yes" en face de MySQL indique que le driver MySQL est prêt à être compilé
I - lancer les commandes build puis install
- set cmake_path=C:\Qt\Tools\CMake_64\bin\cmake.exe
- mkdir build-sqldrivers
- cd build-sqldrivers
pour la version release
- call C:\Qt\6.4.x\msvc2019_64\bin\qt-cmake -G Ninja c:\Qt\6.4.x\Src\qtbase\src\plugins\sqldrivers -DCMAKE_INSTALL_PREFIX=c:\Qt\6.4.x\msvc2019_64 -DMySQL_INCLUDE_DIR="C:\Program Files\MariaDB\MariaDB Connector C 64-bit\include" -DMySQL_LIBRARY="C:\Program Files\MariaDB\MariaDB Connector C 64-bit\lib\libmariadb.lib" -DCMAKE_BUILD_TYPE=Release
- call C:\Qt\6.4.x\msvc2019_64\bin\qt-cmake -G Ninja c:\Qt\6.4.x\Src\qtbase\src\plugins\sqldrivers -DCMAKE_INSTALL_PREFIX=c:\Qt\6.4.x\msvc2019_64 -DMySQL_INCLUDE_DIR="C:\Program Files\MariaDB\MariaDB Connector C 64-bit\include" -DMySQL_LIBRARY="C:\Program Files\MariaDB\MariaDB Connector C 64-bit\lib\libmariadb.lib"
puis, à la fin de l'écran de compilation, vous devez voir apparaître les lignes
Qt Sql Drivers:
DB2 (IBM) .............................. no
InterBase .............................. no
MySql .................................... yes
OCI (Oracle) .......................... no
ODBC .................................... no
PostgreSQL ........................... no
SQLite ................................... yes
Using system provided SQLite ......... no
le "yes" en face de MySQL indique que le driver MySQL est prêt à être compilé
I - lancer les commandes build puis install
- cmake --build .
- cmake --install .
9. Construire le driver MySQL pour Qt 6.4 sous MacOs sur Mac à processeur M1/M2 - build MySQL driver QT6 MacOs Apple M1
Les libs compatibles M1/M2 (arm64) ne sont fournies qu'à partir des versions 8.0.26 de MySQL. Il faut donc impérativement utiliser une de ces versions pour pouvoir compiler le driver MySQL pour Qt6 sur un Mac à processeur arm64.
Se référer à la page www.geeksforgeeks.org/how-to-install-mysql-on-macos/ pour la procédure d'installation.
La configuration du serveur MySQL sera identique à celle décrite dans la page du site rufusvision pour la configuration d'un serveur MySQL 5.7 -> Installation du serveur MySQL sous MacOS
Se référer à la page www.geeksforgeeks.org/how-to-install-mysql-on-macos/ pour la procédure d'installation.
La configuration du serveur MySQL sera identique à celle décrite dans la page du site rufusvision pour la configuration d'un serveur MySQL 5.7 -> Installation du serveur MySQL sous MacOS
Une seule différence cependant, il faut indiquer à MySQL 8.0 qu'il doit utiliser le fichier de configuration my.cnf et son emplacement
Dans pomme/Réglages du système, rubrique MySQL, onglet Configuration Cocher la case Configuration File puis Select et indiquer le chemin vers /etc/my.cnf Valider en cliquant sur Apply |
Installer Qt6.3 ou supérieur et les sources du logiciel par le biais du logiciel d'installation de Qt, MaintenanceTool. Donc, modifiez ou faites une installation neuve en cochant la case Sources du logiciel d'installation comme indiqué dans la capture d'écran ci contre
Installer aussi CMake et Ninja en cochant les cases correspondantes (mais elles le sont normalement par défaut) |
- On est loin d'avoir fini...
Vous devez maintenant créer un lien symbolique cmake dans le dossier /usr/local/bin vers le compilateur cmake que vous venez d'installer dans le dossier /Users/votrenomdutilisateur/Qt/Tools/CMake/CMake.app/Contents/bin
pour cela, dans le terminal, entrez les commandes suivantes
- sudo mkdir /usr/local/bin
- sudo ln -s /Users/votrenomdutilisateur/Qt/Tools/CMake/CMake.app/Contents/bin/cmake /usr/local/bin/cmake
- sudo ln -s /Users/votrenomdutilisateur/Qt/Tools/Ninja/ninja /usr/local/bin/ninja
pour cela, rajouter de nouvelles valeurs à la variable EXPORT en entrant dans le terminal
- export PATH=$PATH:~/Qt/Tools/CMake/CMake.app/Contents/bin:~/Qt/6.4.x/macos/bin:~/Qt/6.4.x/macos/lib:~/Qt/Tools/Ninja
- Attention à entrer la bonne valeur du dossier Qt, ici /Qt/6.4.x, mais il faut remplacer par le véritable emplacement de votre dossier Qt qui varie selon la version que vous avez installée: /Qt/6.4.0, /Qt/6.4.1, /Qt/6.4.2...etc...
C - créer un sous répertoire du dossier personnel build-sqldrivers et s'y déplacer
mkdir build-sqldrivers
cd build-sqldrivers
D - lancer le make du driver SQL
puis, à la fin de l'écran de compilation, vous devez voir apparaître les lignes
Qt Sql Drivers:
DB2 (IBM) .............................. no
InterBase .............................. no
MySql .................................... yes
OCI (Oracle) .......................... no
ODBC .................................... no
PostgreSQL ........................... no
SQLite ................................... yes
Using system provided SQLite ......... no
le "yes" en face de MySQL indique que le driver MySQL est prêt à être compilé
mkdir build-sqldrivers
cd build-sqldrivers
D - lancer le make du driver SQL
- qt-cmake -G Ninja ~/Qt/6.4.x/Src/qtbase/src/plugins/sqldrivers -DCMAKE_INSTALL_PREFIX=/Qt/6.4.x/macos -DMySQL_INCLUDE_DIR="/usr/local/mysql/include" -DMySQL_LIBRARY="/usr/local/mysql/lib/libmysqlclient.dylib" -DCMAKE_OSX_ARCHITECTURES="arm64"
puis, à la fin de l'écran de compilation, vous devez voir apparaître les lignes
Qt Sql Drivers:
DB2 (IBM) .............................. no
InterBase .............................. no
MySql .................................... yes
OCI (Oracle) .......................... no
ODBC .................................... no
PostgreSQL ........................... no
SQLite ................................... yes
Using system provided SQLite ......... no
le "yes" en face de MySQL indique que le driver MySQL est prêt à être compilé
E - modifier le fichier build.ninja
La commande précédente a créé un ensemble de fichiers dans le dossier build-sqldrivers et parmi ces fichiers, le fichier build.ninja va devoir être modifié Il fait référence à une compilation pour une architecture x86_64 et il faut remplacer cette référence par une référence à l'architecture arm64 On peut le faire avec un éditeur de texte en remplaçant -arch x86_64 par -arch arm64 On peut le faire aussi plus simplement en entrant cette commande dans le terminal
|
F - lancer les commandes build puis install
Elle sert simplement à copier les fichiers élaborés par la compilation à leur emplacement dans les répertoires de Qt correspondant.
Dans ce cas,
Voilà, c'était presque simple.
- cmake --build .
- cmake --install .
Elle sert simplement à copier les fichiers élaborés par la compilation à leur emplacement dans les répertoires de Qt correspondant.
Dans ce cas,
- copier les libs contenues dans /Users/votrenomdutilisateur/build-sqldrivers/lib/cmake/Qt6Sql vers le dossier /Users/votrenomdutilisateur/Qt/6.4.x/macos/lib/cmake/Qt6Sql
- copier les libs contenues dans /Users/votrenomdutilisateur/build-sqldrivers/plugins/sqldrivers vers le dossier /Users/votrenomdutilisateur/Qt/6.4.x/macos/plugins/sqldrivers
Voilà, c'était presque simple.