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

 写bug小能手 发布于 2023-02-07 08:31

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

这个问题可能很简单.但是我整整都尝试了一整天.

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

    为了确定它无法加载的原因,你可以像Frank Osterfeld建议的那样使用像Dependency Walker(depends.exe)这样的工具.如果您要在64位计算机上编译32位代码,则需要获取32位依赖性walker.

    它很可能会失败,因为存在qsqlpsql.dll缺失的依赖- 或者libpq.dlllibpq构建所需的库之一.依赖步行者将帮助隔离这一点.您也可能尝试libpq.dll在32位程序中加载64位,反之亦然.

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

    如果你仍然卡住了,总是可以选择使用调试器.

    2023-02-07 08:38 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有