QT5:无法在windows中加载psql驱动程序
我想在Windows7中加载qt5 psql驱动程序 我已按以下方式加载库:QT5:无法在windows中加载psql驱动程序,windows,qt,postgresql,Windows,Qt,Postgresql,我想在Windows7中加载qt5 psql驱动程序 我已按以下方式加载库: qDebug() << QCoreApplication::libraryPaths (); QString driverName = "QPSQL"; QSqlDatabase::addDatabase(driverName,"A connection to postgres"); 在目录:C:/QT/Qt5.1.0/5.1.0/msvc2010/plugins/中,确实有sqldrivers子目录和子
qDebug() << QCoreApplication::libraryPaths ();
QString driverName = "QPSQL";
QSqlDatabase::addDatabase(driverName,"A connection to postgres");
在目录:C:/QT/Qt5.1.0/5.1.0/msvc2010/plugins/
中,确实有sqldrivers
子目录和子目录中的qsqlpsql.dll、qsqlpsqld.dll、qsqlpsqld.pdb
我在ubuntu中成功加载了psql库
而我的.pro文件主要是这样的:
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
}
我找不到它失败的原因
是否需要在.pro文件中添加libpqdll.lib?但是我没有在ubuntu中使用LIBS+=-lpq
顺便说一句:我未能在Windows7中使用VisualStudio2010构建libpq。但这是另一个问题
这个问题可能很简单。但是我试了整整一天。很可能是在程序请求驱动程序后调用
LoadLibrary
时,无法动态链接qsqlpsql.dll
文件LoadLibrary
返回与目标DLL所依赖的DLL之一丢失或无法加载时相同的错误代码。因此Qt很可能会出现“library not found”错误,并假设“哦,Pg驱动程序一定不在这个Qt版本中”,实际上它存在,并且由于依赖性问题、库兼容性问题等而无法加载
要确定它无法加载的原因,您可以按照Frank Osterfeld的建议使用类似的工具。如果您在64位机器上编译32位代码,那么您希望获得32位依赖项walker
它很可能会失败,因为缺少qsqlpsql.dll
的依赖项-要么是libpq.dll
,要么是libpq
构建所需的库之一。Dependency walker将帮助隔离这一点。也可能您正试图在32位程序中加载64位libpq.dll
,反之亦然
您还可能会发现,使用Process Monitor跟踪程序来运行程序会提供信息。这将产生许多关于它试图打开/检查哪些文件的详细信息,以及其他信息,并有助于跟踪意外的PATH
问题
如果您仍然被卡住,则始终可以选择使用调试器进行调试。尝试将libmysql.dll复制到C:\Windows\Systems32如果驱动程序作为插件加载,则无需在链接时链接任何内容,但您必须确保所有依赖项(libpq,请与Dependency Walker联系了解更多信息)在运行时加载插件时可以找到这些属性。@FrankOsterfeld:感谢您通知依赖项步行工具。我试试看。还有其他的解决方案。非常感谢。你的回答很清楚。我将尝试编译libpq.dll,或者下载一个合适的libpq.dll。我还需要了解如何使用这些工具。@AylwynLake如果可能的话,您应该使用编译Qt的
qsqlpgsql.dll
时使用的libpq。
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
}