【问题标题】:linkage of qt objects in cmakecmake中qt对象的链接
【发布时间】:2019-01-02 14:10:29
【问题描述】:

我有一个库 VMSCore,它有 VMSObject::public QObject。 我实现了从 VMSObject 类继承的工厂类。 构建库后,我尝试将其链接到我的 exe 项目。 我得到链接错误:

严重性代码描述项目文件行抑制状态 错误 LNK2019 未解析的外部符号“public:virtual int __cdecl VMS::Factory::qt_metacall(枚举 QMetaObject::Call,int,void * *)" (?qt_metacall@Factory@VMS@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z) 在函数“public:virtual int __cdecl”中引用 VMS::Algorithm::Factory::qt_metacall(枚举 QMetaObject::Call,int,void * *)" (?qt_metacall@Factory@Algorithm@VMS@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z) CVFnVMSExperimental C:\Users\Matvey\cvfn\build\Products\CVFnVMS\mocs_compilation.obj 1

据我了解错误,我没有链接 moc 文件中定义的函数。 在 CMake 中链接 moc 创建的文件的正确方法是什么?

【问题讨论】:

  • 你能在你的构建树中检查mocs_compilation.cpp 的内容吗?每个Q_OBJECT 头文件应该包含一个#include。从您的错误消息来看,VMS::Factory 似乎不包含 Q_OBJECT 声明。
  • 命名空间 VMS { class Factory: public VMS::Object { Q_OBJECT 这就是我在 Factory 类中所拥有的。如果我将我的 Factory /.h 和 .cpp 文件放在实验性包含和实验性源中,一切都会正确编译。

标签: c++ qt cmake


【解决方案1】:

解决了。 我必须在我的 cmake 文件中为库“设置(CMAKE_AUTOMOC ON)”。

【讨论】:

    猜你喜欢
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    • 1970-01-01
    相关资源
    最近更新 更多