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

orb*_*boy 5 c++ windows deployment wxwidgets

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

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

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

我错过了非常重要的事情吗?

VZ.*_*VZ. 5

您应该在有充分理由使用动态链接时使用动态链接,否则使用静态链接.使用动态链接的一些好理由是:

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

如果这些原因都不适用,例如,您只想在MSW下分发单个程序,则静态链接更简单,更可取.

相关说明:如果您最终分发wxWidgets DLL,请考虑使用它们的唯一后缀而不是默认使用的"自定义",这将减少您的DLL与某些其他版本的wx之间混淆的可能性.


Aja*_*jay 4

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

  • 您不依赖于客户端站点上安装的 WX 工具集,也不需要将其与安装程序捆绑在一起,而不是作为独立安装程序作为先决条件
  • 您不期望或要求客户进行 WX 安装(甚至XCOPY部署)。顾客不会打扰!
  • 20MB 对于 TB 级的世界来说是相当小的,但对于 Internet 速度来说却是不错的。
  • 如果客户碰巧使用更高/更低版本的库,您不会从客户那里得到意外的行为错误。
  • 您可以确信应用程序将按照您在环境中测试的方式(大部分)运行
  • 即使有问题/花哨的 X+1 版本出现,您也可以继续使用 X 版本的 WX。您不想让客户拥有“更新且精致”的库版本,这会破坏您的应用程序!