[英]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
這樣的符號,根據庫當前是否正在編譯,有條件地將其定義為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
{
// ...
};
這是有關在msvc和gcc中導出的完整教程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.