对于从共享库显式导出函数,是否存在与 __declspec(dllexport)符号等价的 Linux 表示法?由于我使用的工具链的某些原因,非类成员的函数不会出现在结果共享库文件中。
__declspec(dllexport)
__attribute__((visibility("default")))
据我所知,没有相当于 __declspec(dllimport)的东西。
__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,基于库当前是否正在编译:
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 { // ... };