Compiler le pilote pour PostgreSQL avec Qt 5.0.2 et MinGW sous Windows
Un billet de tondeurh

Le , par tondeurh, Membre actif
avant de se lancer :

Je vais décrire ici la compilation du plugins Qpsql QT version 5.0.2 sous compilation MingWin 32 bits version 4.7.
Et juste parce ce que ce fut un peu la galère pour y aboutir, donc cela vaut bien un petit mémo.

J’utilise ici la version 32 bits de posgresql version 9.2.4, ainsi que QT 5.0.2 sous MingWin32 bits version 4.7.

Nb: ne pas se soucier de la version de MingWin, ce compilateur est fourni avec l’installation de QT 5.0.2., a l’heure de la rédaction de ce post, c’est la version 5.1 de QT qui est disponible avec la version 4.8 de MingWin 32 bits, je pense que le principe de la compilation ne changera pas beaucoup.

Étapes importantes :

– Vous pouvez télécharger les binaires de postgres version 9.2.4 à l’adresse suivante :

http://www.enterprisedb.com/products...wnload#windows.

– Vous pouvez télécharger QT 5.0.2 pour MingWin 32 bits à l’adresse suivante :

http://qt-project.org/downloads

  1. Installer postgresql, en suivant les étapes standard de l’installation, vous pouvez installer postgresql sous le répertoire c:\program files, peut importe le répertoire d’installation même s’il comporte des espaces, on corrigera le fichier Makefile en conséquence.
  2. Vérifiez bien que suite à l’installation de postgresql vous retrouvez bien dans le répertoire d’installation de postgresql, les sous répertoires « include » et « lib ».
  3. Installez QT si ce n’est pas fait, mais en installant également les fichiers sources de QT, vous pouvez installer ces sources à postériori (attention cela peut parfois casser votre configuration précédente).
  4. Vérifiez bien que vous retrouvez bien le répertoire %QTDIR%\Src\qtbase\src\plugins\sqldrivers\psql, en effet ce répertoire contient les sources pour le plugins drivers psql, a vérifier également la présence du répertoire %QTDIR%\Src\qtbase\src\sql\drivers\psql qui contient aussi des fichiers sources nécessaires à la compilation de notre plugins.


Modifier le fichier %QTDIR%\Src\qtbase\src\plugins\sqldrivers\psql\psql.pro , en y ajoutant l’ option suivante :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
 
TARGET = qsqlpsql 
 
DEFINES += HAVE_STRUCT_TIMESPEC 
 
SOURCES = main.cpp 
OTHER_FILES += psql.json 
include(../../../sql/drivers/psql/qsql_psql.pri) 
 
PLUGIN_CLASS_NAME = QPSQLDriverPlugin 
include(../qsqldriverbase.pri)
Pourquoi ? : Simplement parce que certains fichiers include se trouvant dans le répertoire include de postgresql redéfinissent également la structure TimeSpec, et qu’il est impératif de spécifier à notre compilateur d’utiliser la structure se trouvant dans le fichier C:\Program Files\PostgreSQL\9.2\include\pthread.h, ce fichier include défini une macro HAVE_STRUCT_TIMESPEC

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
  
#ifndef HAVE_STRUCT_TIMESPEC 
#define HAVE_STRUCT_TIMESPEC 1 
struct timespec { 
long tv_sec; 
long tv_nsec; 
}; 
#endif /* HAVE_STRUCT_TIMESPEC */

Et c’est cette structure que doit utiliser notre compilateur et non celle qui se trouve dans le fichier timeb.h du répertoire include de notre compilateur C:\Qt\Qt5.0.2\Tools\MinGW\i686-w64-mingw32\include\sys\timeb.h

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
  
#ifndef _TIMESPEC_DEFINED 
#define _TIMESPEC_DEFINED 
struct timespec { 
  time_t  tv_sec;   /* Seconds */ 
  long    tv_nsec;  /* Nanoseconds */ 
};

Créer les fichiers Makefile

on va utiliser pour cela qmake.

Ouvrir une console cmd avec les variables QT correctement défini, cool QT nous propose cela dans le menu démarrer de l’application

se mettre dans le répertoire du fichier psql.pro

cd %QTDIR%\src\plugins\sqldrivers\psql

et exécuter qmake avec les paramétres suivants :
qmake « INCLUDEPATH+=C:\Program Files\PostgreSQL\9.2\include » « LIBS+=C:\Program Files\PostgreSQL\9.2\lib » psql.pro

Ceci permet de générer les fichiers Makefile, Makefile.debug et Makefile.release, en spécifiant par la même occasion les chemin de recherche des fichier include et du fichier libpq.lib

Modifier les fichiers Makefile

Qmake supporte mal les noms de répertoire avec un espace, il faudra donc corriger dans ces 3 fichiers Makefile, les répertoires comportant c:\program files

notamment les lignes suivantes, qui se trouvent en début de fichier
Code shell : Sélectionner tout
1
2
3
4
 
INCPATH = -I. -I"C:\Program Files\PostgreSQL\9.2\include" -I"C:\Qt\Qt5.0.2\5.0.2\mingw47_32\include" -I"C:\Qt\Qt5.0.2\5.0.2\mingw47_32\include\QtSql" -I"C:\Qt\Qt5.0.2\5.0.2\mingw47_32\include\QtSql\5.0.2" -I"C:\Qt\Qt5.0.2\5.0.2\mingw47_32\include\QtSql\5.0.2\QtSql" -I"C:\Qt\Qt5.0.2\5.0.2\mingw47_32\include\QtCore" -I".moc\release_shared" -I"..\..\..\..\mkspecs\win32-g++" 
 
LIBS = "C:\Program Files\PostgreSQL\9.2\lib\libpq.lib" -LC:\Qt\Qt5.0.2\5.0.2\mingw47_32\lib -lQt5Sql -lQt5Core

Lancer la compilation


Dans le répertoire courant qui doit être %QTDIR%\src\plugins\sqldrivers\psql, exécutez la commande mingwin32-make.

Et normalement ça compile => et mingwin32 nous génère deux DLL qsqlpsqld.dll (version Debug) et qsqlpsql.dll (version Release plus légère) dans le répertoire ..\..\..\..\plugins\sqldrivers

Mettre en prod ces DLL

il ne vous reste plus qu’a copier les DLL dans le répertoire %QTDIR%\plugins\sqldrivers, vous trouverez d’autres DLL dans ce répertoire, notamment cette pour le drivers ODBC3.

nb : ne pas copier les fichiers d’extension « .a » (inutile sous Windows)

Faire pointer la variable système %PATH% vers les DLL de postgresql, pour cela on va simplement ajouter à notre variable %PATH% le chemin suivant :

C:\Program Files\PostgreSQL\9.2\bin

pour que notre drivers puisse accéder à la DLL libpq.dll, impératif pour-qu’il fonctionne correctement.

FIN


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster un commentaire

Avatar de Paaka Paaka - Futur Membre du Club https://www.developpez.com
le 17/08/2016 à 11:37
Bonjour tondeurh. Merci beaucoup pour ce tuto très bien fait

Je pose ce commentaire parce que j'ai un souci de répertoire.
Chez moi, le dossier "Src" n'existe pas, donc je ne peux accéder à ce chemin "%QTDIR%\Src\qtbase\src\sql\drivers\psql".
D'après ce que tu écris, je déduis que je n'ai pas installé les fichiers sources. Pourrais-tu m'indiquer la marche à suivre? car je ne les trouve nul part en téléchargement..
Je veux bien tout réinstaller si nécessaire.

Voilà, en espérant avoir une réponse.
Paaka

* EDIT : j'ai téléchargé le package sur le site de Qt, problème résolu.
"Qt Source Package, Full Framework with Windows style line endings " --> "qt-everywhere-enterprise-src-5.3.1.zip "
Offres d'emploi IT
Architecte systèmes études & scientifiques H/F
Safran - Ile de France - Vélizy-Villacoublay (78140)
Spécialiste systèmes informatiques qualité et référent procédure H/F
Safran - Ile de France - Colombes (92700)
Ingénieur conception en électronique de puissance H/F
Safran - Ile de France - Moissy-Cramayel (77550)

Voir plus d'offres Voir la carte des offres IT
Responsable bénévole de la rubrique Qt : Thibaut Cuvelier -