首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译DLL时导出符号- MSVC

编译DLL时导出符号- MSVC
EN

Stack Overflow用户
提问于 2010-11-25 19:32:41
回答 2查看 1.7K关注 0票数 4

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

代码语言:javascript
复制
#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一部分的入口函数就足够了吗?

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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

票数 5
EN

Stack Overflow用户

发布于 2010-11-25 19:38:12

这通常用于头文件,这个头文件既被你的库用来编译,也被它的客户端使用;当你在你的库中包含头文件时,你定义了MyLibrary_EXPORTS,它将导出符号,当你在客户端应用程序中包含头文件时,它将导入它们。

不需要,您只需要导出API入口点-您不需要导出静态函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4276549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档