QT5:无法在Windows中加载psql驱动程序

时间:2014-01-02 13:25:38

标签: windows qt postgresql

我想在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。但这是另一个问题。

问题可能很简单。但我整整一天都试过了。

2 个答案:

答案 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.dlllibpq构建所需的其中一个库。依赖步行者将帮助隔离这一点。您也可能尝试在32位程序中加载64位libpq.dll,反之亦然。

您也可以通过Process Monitor跟踪它来运行您的程序。这将产生很多关于它试图打开/检查哪些文件的详细信息,以及可以帮助跟踪诸如意外PATH问题之类的事情。

如果您仍然遇到困难,可以随时选择使用调试器。

答案 1 :(得分:-2)

尝试将libmysql.dll复制到C:\ Windows \ Systems32