Voir le flux RSS

tondeurh

[Actualité] Compiler le driver Qt psql sous Qt 5.0.2 pour MingWin

Noter ce billet
par , 25/05/2016 à 22h26 (832 Affichages)
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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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

Envoyer le billet « Compiler le driver Qt psql sous Qt 5.0.2 pour MingWin » dans le blog Viadeo Envoyer le billet « Compiler le driver Qt psql sous Qt 5.0.2 pour MingWin » dans le blog Twitter Envoyer le billet « Compiler le driver Qt psql sous Qt 5.0.2 pour MingWin » dans le blog Google Envoyer le billet « Compiler le driver Qt psql sous Qt 5.0.2 pour MingWin » dans le blog Facebook Envoyer le billet « Compiler le driver Qt psql sous Qt 5.0.2 pour MingWin » dans le blog Digg Envoyer le billet « Compiler le driver Qt psql sous Qt 5.0.2 pour MingWin » dans le blog Delicious Envoyer le billet « Compiler le driver Qt psql sous Qt 5.0.2 pour MingWin » dans le blog MySpace Envoyer le billet « Compiler le driver Qt psql sous Qt 5.0.2 pour MingWin » dans le blog Yahoo

Commentaires

  1. Avatar de Paaka
    • |
    • permalink
    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 "
    Mis à jour 17/08/2016 à 15h30 par Paaka