簡體   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