我需要在C++中创建一些共享库,并使用linux作为我的开发人员操作系统.我知道如果我想通过dlsym
/ 加载它们,我需要使符号可见LoadLibrary
.所以在linux中我的所有符号都遵循这种模式:
extern "C" [[gnu::visibility("default")]] void f();
我使用了启用了C++ 11的clang,我能够加载f
我的宿主程序.当我移动到Windows时,我使用GCC 4.8.2启用了C++ 11,并且该模式也适用于Windows机器LoadLibrary
.(我需要使用C++ 11来获取新的属性语法).我知道在Windows上我需要用来__declspec(dllexport)
从共享库中导出符号.所以现在怎么办?是__declspec(dllexport)
不是不再需要?
编辑:
我发现在这里,那些是同义词(我认为),所以问题是,是否有一个[[gnu::attribute]]
用于__declspec(dllimport)
避免使用宏和ifdef
S代表具体的目标?