2010-11-25 48 views
4

我有一個使用CMake作爲編譯系統的共享庫。它使用GCC在Linux機器上編譯得很好。現在我正試圖在Windows上編譯。直到指定MSVC纔會導出符號。我知道關於__declspec(dllexport)。但是CMake wiki中提供的例子令人困惑。請考慮下面的代碼。編譯DLL時導出符號 - MSVC

#if defined (_WIN32) 
    #if defined(MyLibrary_EXPORTS) 
    #define MYLIB_EXPORT __declspec(dllexport) 
    #else 
    #define MYLIB_EXPORT __declspec(dllimport) 
    #endif /* MyLibrary_EXPORTS */ 
#else /* defined (_WIN32) */ 
#define MYLIB_EXPORT 
#endif 

我明白__declspec(dllexport)但不知道爲什麼__declspec(dllimport)使用?另外我該如何使用它?它是否像MYLIB_EXPORT void function()

考慮我有C函數名爲foo()。這在內部使用幾個static函數。導出時,我還需要導出靜態函數嗎?或者僅僅導出屬於API的入口函數就足夠了?

任何幫助,將不勝感激。

回答

1

這是通常用於真實您的圖書館編譯和其客戶同時使用頭文件;當您在庫中包含標題時,您定義了MyLibrary_EXPORTS,並且它將導出這些符號,而當您將該標題包含在客戶端應用程序中時,它將導入它們。

不,您只需要導出API入口點 - 您不需要導出靜態函數。

+0

非常感謝你 – 2010-11-25 11:41:12