我试图避免 dll hell 问题,并且用户必须安装重新分发包,以防他们没有 dll。
是否建议我静态编译我的应用程序?
最佳答案
这取决于。
如果您的程序很小,并且您希望某人能够简单地将单个可执行文件放到他们的计算机上并运行它,那么静态链接是合适的,并且通常是最简单的事情。
如果您的程序较大,或者您无论如何都需要安装程序(部署多个文件、设置注册表项等),那么您也可以动态链接,因为这可以大大减少可执行文件的大小。通过将必要的、可再发行的运行时 DLL 安装在与可执行文件相同的目录中,您可以轻松避免 DLL Hell。如果您想成为真正的专业人士,您可以创建一个基于 MSI 的安装程序,其中包含项目所需的运行时库的合并模块。
不要动态编译并期望用户已经拥有 DLL 或安装 VCRedist 软件包。这很难支持,而且对您的用户来说也是一种痛苦。
有additional considerations如果您正在考虑将自己的 DLL 链接到静态运行时库。如果静态链接到运行时,则可以结束在单个进程中拥有运行时库的多个实例。因此,运行时库维护的任何状态(例如堆信息或下一个 strtok 调用的位置)都将被复制。除非您非常小心,否则这可能会导致细微的错误。
关于windows - 我应该静态编译 VS2008 C++ Win32 应用程序还是动态链接它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16627100/