【发布时间】:2014-02-15 15:10:18
【问题描述】:
我需要用 C++ 制作一些共享库,并且我使用 linux 作为我的开发人员操作系统。我知道如果我想通过dlsym/LoadLibrary 加载符号,我需要使它们可见。所以在linux中我所有的符号都遵循这个模式:
extern "C" [[gnu::visibility("default")]] void f();
我在启用 C++11 的情况下使用了 clang,并且能够在我的主机程序中加载 f。当我迁移到 Windows 时,我使用了启用 C++11 的 GCC 4.8.2,并且该模式在 Windows 机器上也可以使用LoadLibrary。 (我需要将 C++11 用于新的属性语法)。我知道在 Windows 上我需要使用 __declspec(dllexport) 从共享库中导出符号。所以现在怎么办? __declspec(dllexport) 不再需要了吗?
编辑:
我发现here 是同义词(我认为)所以问题是__declspec(dllimport) 是否有[[gnu::attribute]] 以避免使用宏和ifdefs 用于特定目标?
【问题讨论】:
标签: c++ attributes visibility declspec