【问题标题】:Export all functions in imported header files导出导入的头文件中的所有函数
【发布时间】:2020-09-20 13:02:27
【问题描述】:

我正在 Windows 上使用 cmake 和 c++ 构建一个 dll 文件。我的项目由几个头文件组成,一个完整的头文件将包含在不同的 c++ 项目中。较大的头文件如下所示:

#include "header1.h"
#include "header2.h"
#include "header3.h"
...

我读到我必须使用__declspec(dllimport)__declspec(dllexport),所以我使用了一些这样的 ifdef 语句:

#ifdef _WIN32
#    ifdef EXPORT
#        define API __declspec(dllexport)
#    else
#        define API __declspec(dllimport)
#    endif
#elif
#    define API
#endif

我的问题是:我必须把它放在每个头文件中,还是我可以以某种方式为整个头文件做这件事?例如,像这样:

#include API "header1.h"
#include API "header2.h"
#include API "header3.h"
...

(不起作用,但有类似的东西吗?)

【问题讨论】:

  • 您必须为每个要导出/导入的符号使用API 宏。这是因为预处理器和#include 指令没有按您预期的方式工作。当预处理器找到有效的#include 指令时,它基本上直接插入文件的预处理头文件内容来代替#include 指令。
  • 和套件博客文章:blog.kitware.com/…

标签: c++ dll cmake shared-libraries


【解决方案1】:

没有办法避免这个样板。大多数项目只是将定义API-like 宏的通用代码放在专用头文件中,并将#include 放在每个公共头文件的开头。

【讨论】:

    猜你喜欢
    • 2022-12-14
    • 2021-04-14
    • 2018-02-03
    • 2019-08-25
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    相关资源
    最近更新 更多