从共享库显式导出函数时,是否有Linux等效的__declspec(dllexport)
符号?由于某种原因,在我使用的工具链中,非类成员的函数不会出现在生成的共享库文件中.
从共享库显式导出函数时,是否有Linux等效的__declspec(dllexport)
符号?由于某种原因,在我使用的工具链中,非类成员的函数不会出现在生成的共享库文件中.
__attribute__((visibility("default")))
据我所知,没有__declspec(dllimport)
英镑的类似功能.
#if defined(_MSC_VER)
// Microsoft
#define EXPORT __declspec(dllexport)
#define IMPORT __declspec(dllimport)
#elif defined(__GNUC__)
// GCC
#define EXPORT __attribute__((visibility("default")))
#define IMPORT
#else
// do nothing and hope for the best?
#define EXPORT
#define IMPORT
#pragma warning Unknown dynamic link import/export semantics.
#endif
典型用法是根据库当前是否正在编译,有条件地将MY_LIB_PUBLIC
等符号定义为EXPORT
或IMPORT
:
#if MY_LIB_COMPILING
# define MY_LIB_PUBLIC EXPORT
#else
# define MY_LIB_PUBLIC IMPORT
#endif
要使用它,您可以这样标记函数和类:
MY_LIB_PUBLIC void foo();
class MY_LIB_PUBLIC some_type
{
// ...
};