【问题标题】:unresolved external symbol "public: static struct QMetaObject const" when linking to a shared Q_OBJECT链接到共享 Q_OBJECT 时未解析的外部符号 \"public: static struct QMetaObject const\"
【发布时间】:2022-08-06 19:13:28
【问题描述】:

我想在 Windows 上使用 cmake 创建两个 QObject 库:ProA 和 ProB,其中 ProB 依赖于 ProA。

ProA 的代码如下所示:

class ProA_Export ProA: public QWidget
{
    Q_OBJECT
public:
    ...
};

ProB 在 CMake 中链接 ProA:target_link_libraries(ProB ProA)

然后,当我在 ProB 中#include \"ProA.h\" 时,它报告:

unresolved external symbol \"public: static struct QMetaObject const ProA::staticMetaObject\"

如果我从 ProA 中删除 Q_OBJECT,一切正常,除了 QT 的信号槽不起作用。

那么,如何解决Q_OBJECT引起的unresolved external symbol问题呢?

任何建议表示赞赏~~~

- - - - - - - - - - - 更新 - - - - - - - - - -

最后,我发现是connect 导致了问题。

我改变

connect(m_combobox, SIGNAL(currentIndexChanged(int)), this, SLOT(indexChangeSlot(int)));

connect(m_combobox, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &ProA::indexChangeSlot)

然后,一切正常。另外,我觉得Q_OBJECT 是没有必要的。

希望它可以帮助某人。

  • 可能没有生成对应的moc_* 文件。您可以尝试将 set(CMAKE_AUTOMOC ON) 添加到您的 cmake 脚本中。
  • 哪个操作系统?动态库还是静态库?
  • @vahancho,@Wisblade,感谢您的热情回复。操作系统是win10,想生成动态库。 @vahancho,我在我的 cmake 脚本中添加了 set(CMAKE_AUTOMOC ON) 。而且,我可以在vs中看到mocs_compilation_Debug.cpp,mocs_compilation_Debug的内容是#include <EWIEGA46WW/moc_ProA.cpp>。我还在build\\autogen\\include_Debug\\EWIEGA46WW\\moc_ProA.cpp 中找到moc_ProA.cpp

标签: qt cmake


【解决方案1】:

我也遇到了同样的问题,你解决了吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 2021-04-18
    • 2016-08-26
    • 2018-11-13
    • 1970-01-01
    相关资源
    最近更新 更多