是否有等效于 __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 这样的符号,根据库当前是否正在编译,有条件地将其定义为 EXPORTIMPORT :
#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/

10-15 11:50