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.dll
或 libpq
构建所需的库之一。 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 中加载自己的字体