【发布时间】: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 缓存并重新配置。