Qt 5.3 : utiliser postgres sous windows

Je développe avec Qt et postgres sous Linux mais je cherche à compiler mon application pour windows xp…. bah oui, il faut que ce soit plus drôle.

Autant sous Linux pas de problème, je me connecte à ma base de données sans problème, autant sous Windows c’est une autre paire de manches : d’où mon besoin irrepressible de partager avec vous mes trouvailles.

Erreur détectée sur Qt pour Window avec connexion à postgres.

Pour la petite histoire, je récupère mes sources développées avec linux et le programme ne se lance pas avec qtcreator et l’erreur suivante apparaît :

QSqlDatabase:QPSQL driver  not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins
QWidget: Must construct QApplication before a QWidget

Après pas mal de recherches, je découvre qu’il faut compiler le driver postgres

Compiler le driver postgres pour qt

  1. Télécharger ls binaires de postgres : http://www.enterprisedb.com/products-services-training/pgbindownload
  2. dézipper le tout dans c:\pgsql
  3. ouvrir la ligne de commande qt 5.3 for desktop (mingw 4.8 32bit)
  4. se placer dans le répertoire C:\Qt\5.3\Src\qtbase\src\plugins\sqldrivers\psql>
  5. exécuter les commandes suivantes :
    qmake "INCLUDEPATH+=C:/pgsql/include" "LIBS+=C:/pgsql/lib/libpq.lib" psql.pro
    SET PATH=C:\qt\5.3\mingw482_32\bin;C:\qt\Tools\mingw482_32\bin;%PATH%
    mingw32−make.exe


Et là magique, une belle erreur incompréhensible :

C:\pgsql\include/pthread.h:307:8: error: redefinition of ‘struct timespec’

Pour corriger cette erreur, renommer le fichier C:\pgsql\include/pthread.h en pthread.h.old

à présent, relancer votre compilation, elle devrait aller jusqu’au bout.

prochaine étape faire fonctionner notre programme avec les librairies que l’on vient d’obtenir.