QT5: Impossible de charger le pilote psql dans Windows

Je veux charger le pilote qt5 psql dans Windows 7.

Je charge la bibliothèque comme ceci:

qDebug() << QCoreApplication::libraryPaths (); QString driverName = "QPSQL"; QSqlDatabase::addDatabase(driverName,"A connection to postgres"); 

Et la sortie montre:

 ("C:/QT/Qt5.1.0/5.1.0/msvc2010/plugins", "D:/xxx/build-xxx-Desktop_Qt_5_1_0_MSVC2010_32bit-Release/release") QSqlDatabase: QPSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7 

Et dans le répertoire: C:/QT/Qt5.1.0/5.1.0/msvc2010/plugins/ , il sqldrivers sous-répertoires qsqlpsql.dll, qsqlpsqld.dll, qsqlpsqld.pdb et qsqlpsql.dll, qsqlpsqld.dll, qsqlpsqld.pdb dans le sous-répertoire.

Je charge la bibliothèque psql avec succès dans ubuntu.

et mon fichier .pro est principalement comme ceci:

 QT += core gui sql concurrent greaterThan(QT_MAJOR_VERSION, 4): QT += widgets unix { LIBS += -lpython2.7 QMAKE_CXXFLAGS += -std=c++0x } win32 { LIBS += \ C:/Python27/libs/python27.lib } 

Je ne peux pas trouver la raison pour laquelle cela a échoué.

Dois-je append libpqdll.lib dans le fichier .pro? Mais je n’ai pas utilisé LIBS += -lpq dans Ubuntu?

BTW: J’ai échoué à construire libpq dans Windows 7, en utilisant Visual Studio 2010. Mais c’est un autre problème.

La question peut être facile. Mais j’ai essayé un jour complet.

Il est très probable qu’il ne parvienne pas à lier dynamicment le fichier qsqlpsql.dll lorsqu’il invoque LoadLibrary dessus après que votre programme demande ce pilote. LoadLibrary renvoie le même code d’erreur lorsque la DLL cible est manquante lorsque l’ une des DLL dont dépend la DLL cible est manquante ou ne peut pas être chargée . Donc, Qt obtient probablement une erreur “bibliothèque introuvable” et suppose “oh, le pilote Pg ne doit pas être dans cette version Qt”, en fait il est présent et ne se charge pas en raison de problèmes de dépendance, problèmes de compatibilité de bibliothèque, etc.

Pour déterminer pourquoi il ne parvient pas à charger, vous pouvez, comme suggéré par Frank Osterfeld, utiliser un outil tel que Dependency Walker ( depends.exe ) . Si vous comstackz du code 32 bits sur une machine 64 bits, vous voulez obtenir le walker de dépendance 32 bits.

Il est très probable que cela échoue car il y a une dépendance de qsqlpsql.dll manquante – soit libpq.dll , soit l’une des bibliothèques libpq construction de libpq . Le marcheur de dépendance aidera à isoler ceci. Il est également possible que vous libpq.dll de charger un libpq.dll 64 bits dans un programme 32 bits, ou vice versa.

Vous pouvez également trouver utile d’exécuter votre programme avec Process Monitor qui le trace. Cela fournira beaucoup de détails sur les fichiers qu’il tente d’ouvrir / examiner, entre autres, et peut aider à PATH problèmes tels que des problèmes PATH inattendus.

Si vous êtes toujours bloqué, vous avez toujours la possibilité de passer à travers un débogueur.

Essayez de copier libmysql.dll dans C: \ Windows \ Systems32