当我们使用Visual studio (VC8或9)创建动态链接库时,我们会得到一个选项,即create Regular DLL
using MFC as shared DLL或
using MFC as static library它们有什么不同?建议使用哪种方法?
发布于 2010-04-19 14:29:16
我想我现在得到答案了
如果您使用MFC DLL作为动态链接,则您的代码将需要在用户端随应用程序或dll一起安装Microsoft Foundation Library dll(特别是代码所需的版本)。因此,这意味着您的安装包将包含
这会使安装包变得更大,也会让用户花时间下载安装设置。
如果您将MFC链接为静态库,则即使在用户端没有MFC DLL,您的代码也可以正常工作。原因很简单,您在代码中引用的所有MFC库都将链接到您的应用程序或dll中。这意味着你的app/dll中使用的那些MFC库将成为你的二进制文件的一部分;然而,你的app/dll会稍微大一点。
发布于 2010-04-16 20:03:37
静态库意味着您从库中使用的代码包含在您的可执行文件中。因此,您不需要发布该库,也不需要要求最终用户在其计算机上安装该库。然而,这会增加可执行文件的大小,并将您绑定到该库版本,因此,如果您只需要更新库,则必须提供新的可执行文件。
共享库在需要时(运行时)调用该库以执行代码,但它要求用户在其计算机上安装该库(通常是特定版本或最低版本)。如果需要,您还可以将所需的库版本与应用程序一起分发。
至于哪一个更好,我不知道。我不是Windows或C++程序员,所以我不能说。在我的Linux服务器上,我编写的应用程序通常是服务器端的,因此使用共享库。
这取决于你的应用程序是如何被使用、分发、更新的,MFC库有多频繁地改变,它是否在用户的PC上普遍可用等等。
发布于 2011-01-08 13:30:42
另一个考虑事项是为应用程序提供服务。
如果你发布了MSFT redis,动态链接到它的库上,然后MSFT后来“修复”了DLL中的一些重要缺陷,他们会通过Window的更新来修补客户机器上的DLL。如果您静态链接,您将需要直接更新所有客户。
当然,如果您担心打了补丁的DLL可能会破坏您的应用程序(因为您依赖于未指定的行为),那么您可能希望直接与客户一起处理服务(和测试)。
https://stackoverflow.com/questions/2652679
复制相似问题