Tou*_*dou 9 c++ shared-libraries c++20 c++-modules
关于如何在共享库中正确使用 C++20 模块的在线文档非常少。许多人显然 很 感兴趣,但我一直无法找到明确的解决方案。
在MSVC中,您需要dllexport在编译库和dllimport使用符号时使用。这可以使用“旧版 C++”中的宏来完成,但这不适用于 C++20 模块,因为无论预处理器指令如何,代码仅编译一次。
这篇文章建议您现在只需要使用dllexport,dllimport编译器会自动处理。然而,这来自一条现已被删除的评论,而且我找不到有关该主题的任何可靠来源。
如何使用 C++20 模块创建共享库?
C++20 模块与共享库没有特殊关系。它们主要是头文件的替换。
这意味着您将使用 C++20 模块开发共享库,其方式与使用 C++20 之前的头文件类似,至少按照我目前的理解是这样。您设计一些导出的 API(不幸的是仍然使用特定于供应商的属性,如__declspec(dllexport)或__attribute__((visibility("default"))))并实现它。您可以像以前一样构建共享库文件 (.dll/.so) 和用于分发的导入库。但是,您可以分发模块接口单元,而不是分发头文件。export module ABC;模块接口单元是顶部包含声明的文件。
然后,使用该共享库的可执行文件将使用 导入该模块import ABC;,而不是#include使用 -ing 头文件。
编辑:正如评论中所指出的,在 Windows 上似乎仍然有必要在模块接口内提供一个宏开关,用于在 dllexport 和 dllimport 属性之间切换,类似于对标头所做的操作。但是,我目前还没有对此进行实验,只能遵循 @jeremyong 在C++ 模块和动态链接的预期关系是什么?中进行的实验。。
| 归档时间: |
|
| 查看次数: |
4346 次 |
| 最近记录: |