我正在努力避免dll地狱问题和用户必须安装再分发软件包,以防他们没有dll。
建议我静态编译我的应用程序吗?
答案 0 :(得分:2)
取决于。
如果你的程序很小,并且你希望有人能够简单地将一个可执行文件放到他们的机器上并运行它,那么静态链接是合适的,通常是最简单的事情。
如果您的程序较大,或者无论如何您需要安装程序(部署多个文件,设置注册表项等),那么您也可以动态链接,因为这可以大大减少可执行文件的大小。通过在可执行文件所在的目录中安装必要的可再发行的运行时DLL,可以轻松避免DLL Hell。如果你想真正专业,你可以创建一个基于MSI的安装程序,其中包含项目所需的运行时库的合并模块。
不要动态编译并期望用户已经拥有DLL或安装VCRedist包。这很难支持,这对用户来说很痛苦。
如果您正在考虑将自己的DLL链接到静态运行时库,则有additional considerations。如果静态链接到运行时,则可以在单个进程中结束运行时库的多个实例。因此,运行时库维护的任何状态(如堆信息或下一个strtok调用的位置)都将被复制。除非你非常小心,否则这会导致细微的错误。