MinGW是否支持__declspec(dllexport)
/ __declspec(dllimport)
?即使它确实如此,我还应该使用__attribute__((visibility("default")))
吗?基本上我应该根据平台或编译器决定使用什么?
它应该是这样吗?
#ifdef _MSC_VER
# ifdef MYLIB_EXPORTS
# define MYLIB_API __declspec(dllexport)
# else
# define MYLIB_API __declspec(dllimport)
# endif
#else
# define MYLIB_API __attribute__((visibility("default")))
#endif
或者喜欢这个?
#if defined(_WIN32) || defined(_WIN64)
# ifdef MYLIB_EXPORTS
# define MYLIB_API __declspec(dllexport)
# else
# define MYLIB_API __declspec(dllimport)
# endif
#else
# define MYLIB_API __attribute__((visibility("default")))
#endif
那么像__declspec(align(16))
和Vs这样的事情。 __attribute__((aligned(16)))
?
答案 0 :(得分:2)
可见度与dllexport是一个平台的东西,而不是编译器的东西。因此,使用__declspec(dllexport)
/ __declspec(dllimport)
(或__attribute__((dllexport))
/ __attribute__((dllimport))
)与MinGW即可。看到:
http://gcc.gnu.org/wiki/Visibility#How_to_use_the_new_C.2B-.2B-_visibility_support
答案 1 :(得分:0)
是MinGW支持__declspec dllimport / dllexport(http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html)。如果它更容易支持多个编译器,您应该使用它。 通常,编译器特定的属性不可移植,您应该使用宏包装器(如您的示例中所示)。