繁体   English   中英

Linux中显式导出共享库函数

[英]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这样的符号,根据库当前是否正在编译,有条件地将其定义为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
{
    // ...
};

http://gcc.gnu.org/wiki/可见性

这是有关在msvc和gcc中导出的完整教程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM