我有一个使用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
我理解__declspec(dllexport)
,但想知道为什么使用__declspec(dllimport)
?另外我该如何使用它?是MYLIB_EXPORT void function()
吗?
考虑我有一个名为foo()
的C函数。这在内部使用了几个static
函数。导出时我还需要导出静态函数吗?或者只导出属于API的入口函数吗?
任何帮助将不胜感激。
答案 0 :(得分: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
答案 1 :(得分:1)
这通常用于由库编译和客户端使用的头文件;当您在库中包含标题时,您定义MyLibrary_EXPORTS
并导出符号,当您在客户端应用中包含标题时,它将导入它们。
不,您只需要导出API入口点 - 您不需要导出静态函数。