【问题标题】:main() appears to not be called on QtCore inclusion包含 QtCore 时似乎没有调用 main()
【发布时间】:2013-06-27 00:06:21
【问题描述】:

我有以下 main.cpp 文件:

int main(int argc, char* argv[]) {
  *(int*)(NULL) = 5;
  delete (void*)(4);
  throw int(0);
  std::abort();
}

这当然会导致崩溃。在头文件的顶部添加以下魔法行:

#include <QtCore>

无论我在 main() 中施加什么滥用,程序都不会崩溃。结论:main 没有被调用。

为什么..?

我的 CMake 文件:

find_package(Qt5Widgets REQUIRED)

set(CMAKE_AUTOMOC on)

file(GLOB_RECURSE source_files *.cpp *.c)

add_executable(myexec ${source_files})
qt5_use_modules(myexec Widgets)

CMake 2.8.10 (MSVS 11 Win64)、Qt 5.0.2

【问题讨论】:

  • 你可以尝试只添加“#include ”而不是 QtCore 吗?
  • @VaibhavDesai 结果相同。
  • @VaibhavDesai 我收回了。那是一个过时的可执行文件。只是#includeing QApplication 标头会导致崩溃(main 被调用)。但是,添加以下两行会导致 main() 未被调用:QApplication app(argc,argv);return app.exec();。据推测,链接过程中发生了一些可疑的事情,我无法弄清楚。
  • @VaibhavDesai 因此,虽然您并没有真正“添加到帖子中”,但我仍然赞成您的评论,因为它推动了我找到正确答案的方向。谢谢!

标签: c++ qt cmake


【解决方案1】:

链接器有问题。

我在可执行文件上运行了 Dependency Walker,发现运行它的 shell 没有找到 Qt5Widgets.dll 文件。这显然导致了静默链接器错误。问题已在更新环境变量时得到解决。

故事的寓意:始终保持环境清洁、整洁和最新。 Windows 像 Linux 一样好,如果找不到 DLL,它不会告诉你 jack。 <_>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-12
    • 2018-03-27
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    相关资源
    最近更新 更多