我想了解有关Visual Studio 2008的运行时库的一些信息。最具体的是我何时应该考虑DLL版本以及何时应该考虑静态版本。
Visual Studio文档描述了DLL依赖关系和链接库方面的技术差异。但我想知道为什么我要用一个而不是另一个。更重要的是,为什么我要使用多线程DLL运行时,这显然迫使我的应用程序进入DLL依赖,而静态运行时对我的应用程序用户机器没有这样的要求。
答案 0 :(得分:5)
由于DLL依赖性,动态链接到运行时库会使部署复杂化,但也允许应用程序利用MS运行时库的更新(错误修复或更可能的性能改进)而不进行重新编译。
静态链接简化了部署,但意味着必须针对较新版本的运行时重新编译应用程序才能使用它们。
答案 1 :(得分:3)
Larry Osterman认为您应该always use the multi-threaded DLL进行应用程序编程。总结一下:
请阅读他的whole blog post了解详情。
在缺点方面,您需要redistribute运行时库,但这通常已经完成,您可以找到关于如何将其包含在安装程序中的documentation。
答案 2 :(得分:1)
动态链接运行时库可以提供更快的程序启动时间和更小的系统内存使用量,因为dll可以在进程之间共享,如果已经被其他进程使用,则不需要再次加载。
答案 3 :(得分:1)
我认为主要区别在于如何处理异常。 Microsoft不建议静态链接到DLL中的CRT,除非特别希望和理解其后果:
例如,如果在可执行文件中调用
_set_se_translator
来加载链接到其自己的静态CRT的DLL,则DLL中的代码生成的任何硬件异常都不会被转换程序捕获,但会生成硬件异常通过主要可执行文件中的代码将被捕获。