【发布时间】:2019-11-17 23:24:34
【问题描述】:
使用 Microsoft 编译器时,要从库中导出类或函数,您可以使用类似于以下内容的代码:
class __declspec(dllexport) Foo {};
使用 Clang(和 GCC),您可以使用可见性属性来确保符号可见:
class __attribute__((visibility(default))) Foo {};
或者依赖于编译时设置的可见性。
当我在 Windows 上使用 Clang 编译时,如果一个类可见(即使具有显式属性),则不会导出该函数(不创建导入库)。
是否可以让 Clang 生成导入库而不使用 Clang 大部分但不完全支持的 Microsoft 扩展 __declspec(dllexport)。
【问题讨论】:
-
您能否详细说明“Clang 主要但不完全支持的__declspec(dllexport)”,它不支持哪个方面?
-
@mstorsjo 针对 LLVM 项目的
__declspec(dllexport)记录了几个错误;这是我最近提交的一个示例 - bugs.llvm.org/show_bug.cgi?id=44016 -
很公平,这种情况似乎确实偏离了 MSVC 的行为。
-
我很确定是 LLVM 端口激发了微软创建自己的分支。他们研究了一段时间,因为异常处理是更难破解的问题。它在 VS2017 左右变得稳定,并包含在 VS 安装程序中。
-
@HansPassant Microsoft fork 了什么?