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-services-training/pgdownload#windows.

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

http://qt-project.org/downloads


  • 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.
  • 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 ».
  • 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).
  • 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 :

    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


    #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


    #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

    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 :weird:
  • Vous avez lu gratuitement 628 articles depuis plus d'un an.
    Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.

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