首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >常规DLL使用: MFC共享vs MFC静态链接

常规DLL使用: MFC共享vs MFC静态链接
EN

Stack Overflow用户
提问于 2010-04-16 19:57:45
回答 3查看 15.6K关注 0票数 6

当我们使用Visual studio (VC8或9)创建动态链接库时,我们会得到一个选项,即create Regular DLL

代码语言:javascript
复制
 using MFC as shared DLL

代码语言:javascript
复制
 using MFC as static library

它们有什么不同?建议使用哪种方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-19 14:29:16

我想我现在得到答案了

如果您使用MFC DLL作为动态链接,则您的代码将需要在用户端随应用程序或dll一起安装Microsoft Foundation Library dll(特别是代码所需的版本)。因此,这意味着您的安装包将包含

  • 您的应用程序/DLL和支持文件
  • 所有MFC DLL

这会使安装包变得更大,也会让用户花时间下载安装设置。

如果您将MFC链接为静态库,则即使在用户端没有MFC DLL,您的代码也可以正常工作。原因很简单,您在代码中引用的所有MFC库都将链接到您的应用程序或dll中。这意味着你的app/dll中使用的那些MFC库将成为你的二进制文件的一部分;然而,你的app/dll会稍微大一点。

票数 5
EN

Stack Overflow用户

发布于 2010-04-16 20:03:37

静态库意味着您从库中使用的代码包含在您的可执行文件中。因此,您不需要发布该库,也不需要要求最终用户在其计算机上安装该库。然而,这会增加可执行文件的大小,并将您绑定到该库版本,因此,如果您只需要更新库,则必须提供新的可执行文件。

共享库在需要时(运行时)调用该库以执行代码,但它要求用户在其计算机上安装该库(通常是特定版本或最低版本)。如果需要,您还可以将所需的库版本与应用程序一起分发。

至于哪一个更好,我不知道。我不是Windows或C++程序员,所以我不能说。在我的Linux服务器上,我编写的应用程序通常是服务器端的,因此使用共享库。

这取决于你的应用程序是如何被使用、分发、更新的,MFC库有多频繁地改变,它是否在用户的PC上普遍可用等等。

票数 13
EN

Stack Overflow用户

发布于 2011-01-08 13:30:42

另一个考虑事项是为应用程序提供服务。

如果你发布了MSFT redis,动态链接到它的库上,然后MSFT后来“修复”了DLL中的一些重要缺陷,他们会通过Window的更新来修补客户机器上的DLL。如果您静态链接,您将需要直接更新所有客户。

当然,如果您担心打了补丁的DLL可能会破坏您的应用程序(因为您依赖于未指定的行为),那么您可能希望直接与客户一起处理服务(和测试)。

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

https://stackoverflow.com/questions/2652679

复制
相关文章

相似问题

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