在 MSVC 的发布模式下初始化 QApplication 失败

Posted

技术标签:

【中文标题】在 MSVC 的发布模式下初始化 QApplication 失败【英文标题】:Initializing a QApplication fails in release mode of MSVC 【发布时间】:2015-02-04 09:52:50 【问题描述】:

我正在 MSVC 中创建一个 Qt 应用程序。

在我的main 方法中,我使用QApplication app(argc, argv); 创建了一个QApplication

当我在DEBUG mode 中构建程序时,程序运行良好。但是,当我在RELEASE mode 中构建程序时,程序在QApplication app(argc, argv); 行关闭。

当程序关闭时我没有收到错误消息,所以我相信它不是崩溃,而是一些内置的 QApplicaiton 对错误的响应。

关于为什么会发生这种情况的任何建议?

【问题讨论】:

到底是怎么崩溃的(可能有一些错误信息)? 由于是release模式,所以不会出现错误。程序只是关闭... 您的 QT 库是如何构建的?也许您只有调试版本,而没有发布版本? 您是否还加载了其他一些库 - 由其他一些编译器编译?这看起来确实像一些库 ABI 问题。 QApplication 不应轻易崩溃。 @BrunoLubascher 如果这解决了您的问题,您可以考虑自行回答您的问题。这样一来,任何通过搜索类似问题找到您的问题的人都可以使用该解决方案。 【参考方案1】:

问题是 Qt 需要一些我的程序可执行目录中缺少的 dll。

因为是发布模式,所以没有弹出错误,所以程序就直接关闭了。

为了解决这个问题,我必须使用DependencyWalker 来确定我的程序使用了哪些 dll。在找出需要哪些 dll 之后,我将它们放在可执行文件的目录中。一切都按预期进行。

【讨论】:

以上是关于在 MSVC 的发布模式下初始化 QApplication 失败的主要内容,如果未能解决你的问题,请参考以下文章

MSVC 导致静态 const 模板成员初始化失败

控制台出现在发布模式 QT MSVC 2015

局部静态的线程安全初始化:MSVC [重复]

MSVC(和 icc)自动调用 memset C++

如何让 MSVC 将未初始化的数据放入 .bss?

强制整数初始化为 0 msvc++