[英]Explicitly exporting shared library functions in Linux
是否有与__declspec(dllexport)
等价的 Linux 表示法用于从共享库中显式导出函数? 由于我使用的工具链的某种原因,不是类成员的函数不会出现在生成的共享库文件中。
__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
{
// ...
};
这是有关在msvc和gcc中导出的完整教程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.