【问题标题】:In Qt and cmake, how can I moc files generate with my API( dll export) macro在 Qt 和 cmake 中,如何使用我的 API(dll 导出)宏生成 moc 文件
【发布时间】:2022-08-18 22:50:31
【问题描述】:

就我而言,我有一个用于 dll 导出的宏,如下所示:(声明的非常简短的版本)

#ifdef EXPORTDLL 
#define MMAPI _declspec(export)
...

我的课是这样的:

Class MMAPI myClass: public qobject{
Q_Object()
...

通常,mmapi 被指定为导出。

由于(在我看来)由 auto moc 和 cmake 创建的 staticmetaobject 未作为导出 dll 删除,因此我出现了链接器错误。 我为此找到了一些解决方案。该解决方案建议在 cmake 文件中包含一些宏行以生成导出文件。不幸的是,我不想这样做。我想使用我的 mmapi。

简而言之,我怎样才能用我的宏生成静态元对象。

从现在开始,谢谢大家的帮助。

编辑:当我将库类型更改为静态项目构建但 qml 和 qt 库找不到 qrc 文件时

  • 什么喜欢的错误?使用 AUTOMOC 时,您不需要任何额外的设置。
  • @Osyotr 嗨,当我添加到 Q_Object 宏行时,链接器说 \"error LNK2001: unresolved external symbol \"public: static struct QMetaObject const\"。Cmake 生成 moc 文件,但在 moc 文件中没有关于 dll 导出的内容
  • 只要使用 dll 链接到生成的导入库的代码并且在导入时使用正确的__declspec( dllimport ),这应该可以工作,或者至少我不会得到链接器错误。
  • 当我查看 Qmetaobject 时,q 核心导出定义为导入。我应该怎么办
  • 该错误表示已声明静态成员,但未定义。该定义应由 moc 生成(即moc_MyClass.cpp)。也许它没有被您的构建系统拾取?没有更多代码很难说。尝试删除 cmake 缓存并重新配置。

标签: c++ qt cmake qml


【解决方案1】:

我找出问题所在。当我在 cmake 中单独和私有定义导出 dll 时,问题就解决了。我的主要应用程序库以某种方式看到了宏。

【讨论】:

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