【问题标题】:Qt program fails to compile/has runtime error (IDE: CodeBlocks/QtCreator)Qt 程序编译失败/存在运行时错误(IDE:CodeBlocks/QtCreator)
【发布时间】:2012-12-20 14:57:05
【问题描述】:

我是 Qt 的新手。虽然我已经安装了 4.8.3 很长时间,但我昨天开始编写我的第一个 Qt 程序。我在windows环境下,我的C++代码使用CodeBlocks。

我按照 Qt 编程这本书,并尝试重现书中的示例。第二章出现了问题,当时需要单独编译。我从来没有用 CodeBlocks 成功地单独编译过,这次也不例外:我仍然收到“对 XXX 的未知引用”。

我试图在网上找到所有指令但我仍然无法解决它(设置 qmake、链接等)特别是当我使用 qmake 并将 makefile 标记为自定义文件时,每当我编译我的程序时,CodeBlocks 告诉我项目尚未建成;当我点击“是”构建程序时,弹出相同的“尚未构建”通知,并重复该过程。

我曾经怀疑我的 Qt 出了问题,所以我将其删除并安装了最新的(即 Qt5.0)。但是我用不了,因为CodeBlocks只支持Qt4,而我的编译器不支持Qt5。

所以我尝试下载“旧版本”,4.8.4。后来发现连单文件程序都编译不出来(我是说整个项目只有一个.cpp文件,没有自定义头文件)。我尝试了默认的CodeBlock qt程序,是这样的:

    #include <QApplication>
    #include <QFont>
    #include <QPushButton>

    int main(int argc, char* argv[])
    {
        QApplication app(argc, argv);
        QPushButton quit("Quit");
        quit.resize(75, 30);
        quit.setFont(QFont("Times", 18, QFont::Bold));
        QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit()));
        quit.show();
        return app.exec();
    }

只是一个非常标准的。它应该可以编译,并且确实可以编译,但情况更糟:程序永远无法运行,因为在执行后立即发生运行时错误(错误代码:0xC0000005 或 -1073741819) 这是我的问题1:我没有线索,我该怎么做才能解决这个问题?我不介意删除我的 CodeBlocks 和 Qt 并在它们工作时重新安装,但我已经尝试过,但没有用。

我的第二个问题:(解决了) 然后我尝试使用 Qt Creator。当我编译上面显示的简单程序时,我收到了很多关键字“unwind_resume”的错误 - 谁能告诉我如何解决它? (网上的cmets建议运行qtvar.bat,但是没用;有人建议建debug库,我试过了,因为内存不够不小心停了?)

我的第三个问题:(因为上面已经讨论过,觉得比较多余,所以我删掉了)

(我应该首先感谢那些真正阅读我的帖子的人。我不得不说,虽然提供的信息可能不足以找到解决方案,但我只知道这些。)

更新 - 更多信息:实际上我也有类似的未定义代码块参考。但是我很懒,所以我只是将所有 .dll 文件从 qt 文件夹复制到 SysWOW64;昨天程序确实编译并运行了,但是在我今天重新安装 qt 和 codeblocks 后程序因运行时错误而崩溃,即使我也复制了新的 .dll 文件。说清楚点:如果我将.dll文件复制到SysWOW64,Codeblocks可以编译程序,但现在程序崩溃了,不像昨天程序正常运行。)

更新 - 现在问题是运行时错误。

【问题讨论】:

  • 调用堆栈?你试过调试吗?
  • 有一种方法可以判断 CodeBlocks 是否有问题:从终端编译程序。我曾经遇到过类似的问题(使用 QtCreator)并手动编译了代码。一切顺利,这是一个缓存问题。试试这个:qmake -project 后跟 qmakemake。然后启动二进制文件,看看一切是否按预期进行。我在 Windows 中使用 MingW 尝试了你的代码并成功了。
  • unwind_resume 通常是因为错误的代码块安装或项目,通常是项目的责任。
  • @Need4Sleep 我在 QtCreator 中遇到了 unwind_resume,但实际上没有遇到 CodeBlocks。
  • 你试过this吗?但这不是一个解决方案,但可能会让我们清楚地看到另一个问题,这就是造成这一切的原因。

标签: c++ qt codeblocks


【解决方案1】:

好的,让我们在这里回顾一下,停止在评论后连接评论。

对于您的第一个问题,我们清除了任何先前编译的构建文件夹,只留下所需的文件,即:.cpp 文件、.h/hpp 文件和.pro 文件(以及您可能需要的任何资源文件,但本例并非如此)。

然后从终端/cmd手动编译你就可以构建项目了:

qmake.exe -project <PATH_TO_NEEDED_FILES>
qmake
make

现在,关于运行时错误的第二个问题和Entry Point Not Found... 好吧,我一无所知。谷歌了一下,我发现Entry Point 错误的最常见原因是Qt 链接到旧版本的dll:

Entry Point Error 1

Entry Point Error 2

Entry Point Error 3

在第二个链接中,通过将 Qt 路径设置为 Windows PATH 中的第一个路径解决了问题。也许这有帮助。

希望有更多经验的人帮忙!!

【讨论】:

  • 我会尝试...Entry Point 错误真的很烦人。我正在使用 4.8.4 dll,但它不是很令人满意。无论如何,我认为我最终找不到解决它的好方法,也许将 dll 文件复制到 SysWOW64 是唯一的选择。
  • 嗨。在我的电脑中,我没有设置任何变量。我在 Windows 系统路径中只有 Qt bin 文件夹的路径。但是,我不能确定是否没有链接或周围的任何东西,因为当我开始工作时,Qt 已经安装好等待我。现在我一无所知。如果我有什么想法,我会告诉你的。再见!
  • 关于运行时的最后一个问题:当我尝试在程序中逐行删除我的代码时,我发现运行时错误从一开始就开始了:`QApplication app(argc, argv);`换句话说,我不能编写任何 Qt 程序。如何捕获异常以便找到更多线索?我尝试使用标准的trycatch (exception e) cout&lt;&lt;e.what();,但程序毫无例外地崩溃了,我猜不出发生了什么
  • 嗯,这很奇怪。这是在任何其他 Qt 调用应用程序之前必须放置的行。也许是链接问题?
  • 似乎 Qt 中唯一可用的例外是 QConcurrent 模块中的例外。如果你还没有做过,我认为最好直接在 Qt 论坛中询问。开发人员可能知道发生了什么。
猜你喜欢
  • 2019-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-01
相关资源
最近更新 更多