【问题标题】:Qt subproject can't find moc filesQt子项目找不到moc文件
【发布时间】:2017-10-01 16:23:22
【问题描述】:

我最近尝试为一个包含 Q_OBJECT 宏和自定义信号的类编写单元测试(使用 googletest)。测试子项目将无法编译(即使在重建/删除所有内容之后)并出现以下链接器错误:

"error: undefined reference to `vtable for Class'"

"error: undefined reference to `vtable for Class::signal()'"

我的 src 子项目编译得很好。在研究了这个问题后,我猜问题是编译器没有为测试子项目生成 moc 文件。我也没有成功将 src 子项目的 moc 文件包含在测试中。我该如何解决这个问题?

这是我的 .pro 文件:

项目 .pro 文件

TEMPLATE = subdirs
CONFIG(debug, debug|release) {
    SUBDIRS += \
        src \
        test
    test.depends = src
} else {
    SUBDIRS += \
        src
    QMAKE_CXXFLAGS += -O2
}

src.pro

QT += core gui charts widgets
TARGET = Project name
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000
HEADERS += \
    ...
SOURCES += \
    ...

test.pro

include(gtest_dependency.pri)
QT += core
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG += thread
CONFIG += qt
INCLUDEPATH += $$PWD/../src
DEPENDPATH += $$PWD/../src
HEADERS += \
    ... (only test headers)
SOURCES += \
    ... (test and src source files)

【问题讨论】:

  • 您使用的是哪个 Qt 版本?您禁用了 Qt 6 之前已弃用的所有内容(尚未发布...)这可能与您的问题有关。
  • @Felix 我正在使用 Qt 5.9。删除该行并不能解决问题。
  • 请告诉我们Class的代码,也许你在那里遗漏了什么

标签: qt


【解决方案1】:

我遇到了同样的问题。确保 Qt mocs 测试项目的 src 标头似乎也需要在测试项目的 .pro 文件中提及它们。因此添加如下内容:

HEADERS += ( dependent src headers )

如果测试需要所有 src 头文件,可以将它们提取到一个通用的 .pri 文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多