Q_DECL_EXPORT 关键字的含义是什么?

25
在这个 int main(...) 之前的 Q_DECL_EXPORT 是什么意思?
2个回答

26

以下是从QT文档摘录的内容:

根据目标平台的不同,Qt提供了特殊的宏定义,包含必要的定义:

  • 当编译共享库时使用的符号声明中必须添加Q_DECL_EXPORT。
  • 当编译使用共享库的客户端时使用的符号声明中必须添加Q_DECL_IMPORT。

我还没有检查过QT代码,但很可能此宏将执行以下操作:

#ifdef _WIN32 || _WIN64
    #define Q_DECL_EXPORT __declspec(dllexport)
    #define Q_DECL_IMPORT __declspec(dllimport)
#else
    #define Q_DECL_EXPORT
    #define Q_DECL_IMPORT
#endif

__declspec(dllimport)__declspec(dllexport) 告诉链接器从 DLL 导入或导出(分别)一个符号。 这仅适用于 Windows。

在您的特定情况下,这个宏可能可以被删除,因为 main() 很可能不是库的一部分。


当为Android构建Qt应用程序时,需要使用Q_DECL_EXPORT main(),因为本地Android应用程序是从引导Java代码加载的库。在Blackberry下可能也类似,我不确定。 - tanius

7

这不是一个关键字,而是一个宏,用于封装不同编译器特定的关键字来声明函数为exported

另请参见Q_DECL_EXPORT创建共享库

通常与库一起使用,定义需要从库中导出的函数,以便其他库或可执行文件可以导入(“使用”)它们。

我迄今为止还没有看到使用main函数的情况,但这可能是黑莓特有的事情。另一方面,这个教程也没有在main()函数中使用宏,因此它可能可以被删除。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接