IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

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

Le , par tondeurh

0PARTAGES

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 Qt-pro : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
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

Une erreur dans cette actualité ? Signalez-nous-la !