我有一个共享库,它使用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一部分的入口函数就足够了吗?
任何帮助都将不胜感激。
发布于 2010-11-25 19:36:10
只导出作为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
发布于 2010-11-25 19:38:12
这通常用于头文件,这个头文件既被你的库用来编译,也被它的客户端使用;当你在你的库中包含头文件时,你定义了MyLibrary_EXPORTS,它将导出符号,当你在客户端应用程序中包含头文件时,它将导入它们。
不需要,您只需要导出API入口点-您不需要导出静态函数。
https://stackoverflow.com/questions/4276549
复制相似问题