编译DLL时导出符号 - MSVC

Nav*_*K N 4 c cmake visual-c++

我有一个使用CMake作为构建系统的共享库.它在使用GCC的Linux机器上编译很好.现在我正在尝试在Windows上编译.在指定之前,MSVC不会导出符号.我知道__declspec(dllexport).但是CMake维基中提供的示例令人困惑.请考虑以下代码.

#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
Run Code Online (Sandbox Code Playgroud)

我理解,__declspec(dllexport)但想知道为什么__declspec(dllimport)使用?另外我该如何使用它?是MYLIB_EXPORT void function()吗?

考虑我有C函数命名foo().这在内部使用了几个static功能.导出时我还需要导出静态函数吗?或者只导出属于API的入口函数是否足够?

任何帮助,将不胜感激.

Jay*_*Jay 5

仅导出作为API一部分的入口函数就足够了.无需导出静态函数.

此外,无需使用__declspec(dllimport)进行功能.仅需要数据.Windows将自动执行导入功能.

以下链接可能会有所帮助:

http://msdn.microsoft.com/en-us/library/ms235636(VS.80).aspx

http://msdn.microsoft.com/en-us/library/ms682589(VS.85).aspx