【问题标题】:QSqlDatabase hello world application fails to debugQSqlDatabase hello world 应用程序无法调试
【发布时间】:2013-12-04 15:23:09
【问题描述】:

我正在尝试使用 PostgreSQL 的 QSqlDatabase hello world 应用程序。我的环境如下:Windows 7 64位,Qt 4.8.2,PostgreSQL 9.0.13。以下代码编译,但不会调试,即当我在 QSqlDatabase::drivers() 行上放置一个中断时,但代码以异常退出。当我注释掉这一行时,应用程序按预期运行。有什么建议吗?

#include <QApplication>
#include <QMainWindow>
#include <QtSql/QtSql>
#include <QtSql/QSqlDatabase>

int main(int argc, char *argv[])
{
    QApplication prog(argc, argv);
    QMainWindow *mainWin = new QMainWindow;
    QStringList drvlst = QSqlDatabase::drivers();  // <-- problem!
    mainWin->show();

    return prog.exec();
}

【问题讨论】:

  • 执行目录下有QtSql4.dll吗?
  • ... 或 QtSql4d.dll 如果您使用的是调试库。
  • 不,我不知道。我在这些目录中有 qsqlpsql4.dll 和 qsqlpsqld4.dll。此外,在运行 Dependency Walker 时,它确实会在 qtsqld4.dll 上产生错误 - 特别是 ssleay32.dll、libeay32.dll 和 kernel32.dll。看起来像 x86 与 x64 的问题?
  • 这是一个很好的。使用 Dependency Walker,我(或者我们,感谢 Noah)能够识别出 Qt 正在使用 libeay32.dll 的 openvpn“版本”,因为 PATH 环境变量中的这个目录引用位于列表的开头。将 openvpn 引用移动到 PATH 的末尾解决了这个问题。
  • 把它作为答案然后关闭这个问题

标签: qt postgresql qt-creator qtsql


【解决方案1】:

DLL 地狱的另一个例子,以及 Dependency Walker 如何成为诊断这种性质的潜在错误的好工具。同样,在这种情况下,链接器正在遍历 PATH 环境变量以查找 QTSQLD4.DLL 库依赖项。链接器找到了 openVPN SSLEAY32.DLL(实际上是 64 位)而不是 SSLEAY32.DLL 的 postgreSQL 版本。将 openVPN url 移动到 PATH 环境变量的末尾解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多