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