QT5:在 windows 中加载 psql 驱动程序失败

Posted

技术标签:

【中文标题】QT5:在 windows 中加载 psql 驱动程序失败【英文标题】:QT5: Failed to load psql driver in windows 【发布时间】: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 与其他解决方案。 【参考方案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

【讨论】:

以上是关于QT5:在 windows 中加载 psql 驱动程序失败的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Qt Creator 中加载 qwt_designer_plugin

在 Windows 8.1 上使用 OpenCV 在 C++ 中加载图像需要很长时间

无法在 Visual C++ 中加载 SQL 驱动程序(但在 QtCreator 中加载)

使用 Python (PyQT 5.10) 在 QT 5.10 中加载自己的字体

在 Android 中加载 Oracle JDBC 驱动程序类

libGL 错误:无法在 docker 容器中加载驱动程序 swrast