【问题标题】:QT5: Failed to load psql driver in windowsQT5:在 windows 中加载 psql 驱动程序失败
【发布时间】:2014-01-02 13:25:38
【问题描述】:

我想在 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

顺便说一句:我未能在 Windows 7 中使用 Visual Studio 2010 构建 libpq。但这是另一个问题。

这个问题可能很简单。但我已经尝试了一整天。

【问题讨论】:

  • 如果驱动程序作为插件加载,则无需在链接时链接任何内容,但您必须确保在运行时找到所有依赖项(libpq,请查看 Dependency Walker 了解更多信息)加载插件时。
  • @FrankOsterfeld:感谢您通知 Dependency Walker 工具。我会试试的。
  • Similar question 与其他解决方案。

标签: windows qt postgresql


【解决方案1】:

在您的程序请求该驱动程序后,当它在其上调用LoadLibrary 时,很可能无法动态链接qsqlpsql.dll 文件。 LoadLibrary 在目标 DLL 丢失时返回与 目标 DLL 所依赖的一个 DLL 丢失或无法加载时相同的错误代码。所以 Qt 很可能得到一个“找不到库”错误并假设“哦,Pg 驱动程序不能在这个 Qt 构建中”,实际上它存在并且由于依赖问题、库兼容性问题等而无法加载。

要确定加载失败的原因,您可以按照 Frank Osterfeld 的建议使用Dependency Walker (depends.exe) 之类的工具。如果您在 64 位机器上编译 32 位代码,您希望获得 32 位依赖遍历器。

它很可能会失败,因为缺少 qsqlpsql.dll 的依赖项 - libpq.dlllibpq 构建所需的库之一。 Dependency walker 将有助于隔离这一点。您也可能尝试在 32 位程序中加载 64 位 libpq.dll,反之亦然。

您还可能会发现,使用 Process Monitor 跟踪程序来运行您的程序会提供有用的信息。这将产生很多关于它尝试打开/检查哪些文件的详细信息,并且可以帮助追踪诸如意外PATH 问题之类的事情。

如果您仍然卡住,则始终可以选择使用调试器单步执行。

【讨论】:

  • 非常感谢。你的回答很清楚。我会尝试编译 libpq.dll 或下载一个,如果有合适的。而且我还需要知道如何使用这些工具。
  • @AylwynLake 你应该使用 same libpq 你的 Qt 的 qsqlpgsql.dll 如果可能的话。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    相关资源
    最近更新 更多