将应用程序部署为静态或动态构建的最佳实践是什么?

时间:2016-05-18 09:57:21

标签: c++ windows deployment wxwidgets

我计划发布和部署一个用C ++和wxWidgets编写的应用程序。 wxWidgets-library既可用作dll,也可用作静态库。因此,我可以选择将应用程序部署为动态构建应用程序或静态构建。

目前,我更喜欢静态构建选项,因为:

  • 可执行文件不是太大(<20兆字节)。
  • 无需考虑依赖。
  • 无需安装。

问题

我是否错过了一些非常重要的内容?

3 个答案:

答案 0 :(得分:5)

当有充分理由使用动态链接时,应使用动态链接,否则使用静态链接。使用动态链接的一些很好的理由是:

  1. 您正在为已经拥有或可能拥有wxWidgets库的系统分发二进制文件,例如许多Linux发行版,OS X(使用Homebrew)等。在这种情况下,最好重用现有的系统库而不是使用自己的。
  2. 你有几个使用wxWidgets的模块:在这里使用动态链接节省空间可能非常重要。
  3. 您在MSW下使用来自DLL的wxWidgets:在这种情况下,wxWidgets本身也应该作为DLL链接,否则如果将多个wxWidgets实例加载到进程地址空间,则存在问题。
  4. 您计划通过网络更新应用程序的安装:在这种情况下,只更新一个DLL而不是整个单片应用程序可能会很好。
  5. 如果这些原因都不适用,例如你只想在MSW下发布一个程序,静态链接更简单,更可取。

    相关说明:如果您最终分发wxWidgets DLL,请考虑为它们使用唯一的后缀而不是默认使用的“custom”,这将减少您的DLL与某些其他版本的wx之间混淆的可能性。< / p>

答案 1 :(得分:3)

我的建议是去静态链接。我的两分钱优势:

  • 您不依赖于在客户端站点上安装的WX工具集,您既不需要将其与安装程序捆绑在一起,也不需要将其作为先决条件的独立安装程序。
  • 您不期望或要求客户进行WX安装(甚至XCOPY部署)。客户不会打扰!
  • 20MBs在世界范围内的TB和互联网速度的MB很小。
  • 如果他们碰巧使用更高/更低版本的库,您就不会从客户那里得到意外的行为错误。
  • 您可以确信应用程序的工作方式与您在环境中测试的方式相同(主要是)
  • 您可以继续使用X版本的WX,即使出现错误/华丽的X + 1版本。你不想让顾客拥有更新,更精致的东西。库的版本,打破了你的应用程序!

答案 2 :(得分:1)

虽然在您的情况下可执行文件不是很大,但如果您静态链接所有内容,它可能会变得非常大。它还使用更多内存,因为必须将较大的可执行文件加载到内存中。

如果您要使用动态库,操作系统可以从每个进程之间“共享”只读内存,从而降低内存需求。

使用动态库更新应用程序也更容易,因为不必更新整个可执行文件,您只需更换动态库(假设其界面相同),瞧!如果用户想要更新其动态库(例如,通过包管理器),则同样适用。