是否有等效于 __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
{
// ...
};
关于c++ - Linux中显式导出共享库函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2164827/