2

我试图避免 dll 地狱问题和用户必须安装重新分发包以防万一他们没有 dll。

是否建议我静态编译我的应用程序?

4

1 回答 1

2

这取决于。

如果您的程序很小,并且您希望某人能够简单地将单个可执行文件放到他们的机器上并运行它,那么静态链接是合适的,并且通常是最简单的事情。

如果您的程序较大,或者您仍然需要安装程序(部署多个文件、设置注册表项等),那么您也可以动态链接,因为这可以大大减少可执行文件的大小。通过在可执行文件所在的目录中安装必要的、可再发行的运行时 DLL,您可以轻松避免 DLL Hell。如果您想真正成为专业人士,您可以创建一个基于 MSI 的安装程序,其中包含项目所需的运行时库的合并模块。

不要动态编译并期望用户已经拥有 DLL 或安装 VCRedist 包。这很难支持,这对您的用户来说是一种痛苦。

如果您正在考虑将自己的 DLL 链接到静态运行时库,则还有其他注意事项。如果静态链接到运行时,则可以结束在单个进程中拥有运行时库的多个实例。因此,运行时库维护的任何状态(如堆信息或下一次 strtok 调用的位置)都将被复制。除非您非常小心,否则这可能会导致细微的错误。

于 2013-05-18T19:28:19.110 回答