【问题标题】:QT build QWidget, QObject ErrorsQT构建QWidget,QObject错误
【发布时间】:2016-09-23 19:49:18
【问题描述】:

处理由其他人编写的相当大的代码块,我对 QT 不是很熟悉,但我最近的调试没有成功。

工作出色后,我添加了 3 行,然后将它们全部注释掉,并且在测试时发现了这两个错误的更多变体:

undefined reference to 'QObject::connectNotify(char const*)' (.rodata._ZTV15NumberWithUnits[_ZTV15NumberWithUnits]+0x60) undefined reference to 'QWidget::x11Event(_XEvent*) (.rodata._ZTV15NumberWithUnits[_ZTV15NumberWithUnits]+0x160)

我在想可能有一些库或其他构建错误,或者我需要进行文件清理,但我被卡住了。

在搜索和尝试多件事后,我找到了几个类似的答案,例如this one,我正在尝试实现添加 -lqt 语句或修复 qmake。

关于如何执行此操作或其他尝试的建议?

【问题讨论】:

  • 删除build文件夹并重建项目...
  • 哇,简单的修复工作。我还有其他错误,我认为目前无关。在 QT 环境中是否经常发生这种情况?知道为什么/什么时候可以看到吗?
  • 这是因为 makefile - qmake 的输出 - 取决于 qmake 扫描输入的所有文件,但如果 qmake 每次都必须重新读取它们中的任何一个,它会减慢构建速度改变了。所以它不会那样做。这可以通过稍微重新架构 qmake 来解决,但鉴于 qmake 作为一种工具已处于生命的尽头,因此几乎没有这样做的动力。如果您想避免该问题,请改用qbs(Qt 构建系统)或cmake

标签: c++ qt build qmake


【解决方案1】:

Qt 依赖于几种不同类型的生成文件,如果你的构建系统,不管它是什么,不知道这些依赖关系,也不知道在你进行更改时重新生成文件,那么你'由于这些生成的文件过时,会收到很多令人困惑的错误消息。

在这种特定情况下,最有可能的是“MOC”(元对象编译器)文件已过期。这些文件是从包含 Q_OBJECT 宏的包含文件生成的,它是创建它们的“moc”实用程序。

其他情况包括:

  • UI 标头,使用“uic”实用程序从 .ui(Qt 设计器)文件生成
  • 资源文件 (.cpp),使用“rcc”实用程序从 .qrc 文件生成。

理想情况下,您的构建系统将具有依赖关系,表明生成的 MOC 文件依赖于包含 Q_OBJECT 宏的匹配 .h 文件,然后您的构建系统将运行“moc”以重新生成文件。如果您的构建系统没有这样做,那么您将感到非常沮丧。

【讨论】:

  • 感谢您的回答。我一定仍然不知道如何设置这一切。我无法再运行 qmake 并在删除它并重新构建和运行 qmake 后使用我的所有 .o 文件生成一个 BIN 文件。我的 .pro 文件中有 OBJECTS_DIR = ./BIN/ 和 MOC_DIR = ./BIN/ ,我不知道如何摆脱对 `QChar::QChar(char)' 的数百个“未定义引用” ..etc .错误。我认为这是由于此构建错误造成的,但由于某种原因,它不再适合我了。我的命令行尝试也没有结果。想法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多