我想在Windows 7中加载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", "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
在目录: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
?
BTW:我没能在Windows 7中使用visual studio 2010构建libpq。但这是另一个问题。
问题可能很简单。但我整整一天都试过了。
答案 0 :(得分:6)
在程序请求驱动程序后,qsqlpsql.dll
文件调用LoadLibrary
时,很可能无法动态链接LoadLibrary
文件。 <{1}}返回与目标DLL丢失时相同的错误代码,以及目标DLL所依赖的其中一个DLL丢失或无法加载时的错误代码。所以Qt很可能会找到一个未找到的库#34;错误并假设&#34;哦,Pg驱动程序必须不在这个Qt构建中#34;实际上它存在并且由于依赖性问题,库兼容性问题等而无法加载。
要确定无法加载的原因,您可以像Frank Osterfeld建议的那样使用像Dependency Walker (depends.exe
)这样的工具。如果您要在64位计算机上编译32位代码,则需要获取32位依赖性walker。
很可能会失败,因为qsqlpsql.dll
缺少依赖关系 - libpq.dll
或libpq
构建所需的其中一个库。依赖步行者将帮助隔离这一点。您也可能尝试在32位程序中加载64位libpq.dll
,反之亦然。
您也可以通过Process Monitor跟踪它来运行您的程序。这将产生很多关于它试图打开/检查哪些文件的详细信息,以及可以帮助跟踪诸如意外PATH
问题之类的事情。
如果您仍然遇到困难,可以随时选择使用调试器。
答案 1 :(得分:-2)
尝试将libmysql.dll复制到C:\ Windows \ Systems32