我想了解Visual Studio 2008的运行时库的一些信息。特别是何时应该考虑DLL版本以及什么时候应该考虑静态版本。Visual Studio 2008,运行时库使用建议
Visual Studio文档描述了DLL依赖关系和链接库方面的技术差异。但我仍然想知道为什么我应该使用一个。更重要的是,我又何必要使用多线程DLL运行时,这显然迫使我的应用程序到DLL的依赖,而静态运行时有我的应用程序的用户的机器上没有这样的规定。
我想了解Visual Studio 2008的运行时库的一些信息。特别是何时应该考虑DLL版本以及什么时候应该考虑静态版本。Visual Studio 2008,运行时库使用建议
Visual Studio文档描述了DLL依赖关系和链接库方面的技术差异。但我仍然想知道为什么我应该使用一个。更重要的是,我又何必要使用多线程DLL运行时,这显然迫使我的应用程序到DLL的依赖,而静态运行时有我的应用程序的用户的机器上没有这样的规定。
Larry Osterman认为应该编程的应该是always use the multi-threaded DLL。总结:
请阅读他的whole blog post了解详细信息。
不利的一面,你需要redistribute运行时库,但是这通常做,你可以找到如何将其纳入您的安装documentation。
动态连接到运行时库会使得部署稍微复杂化,这是由于DLL依赖性的原因,而且还允许应用程序在不重新编译的情况下利用MS运行时库的更新(错误修复或更可能的性能改进)。
静态链接简化了部署,但同时也意味着你的应用程序必须运行的新版本才能使用它们进行重新编译。
动态链接运行时库可以让你更快的程序,因为该dll可以在进程间共享,将不需要再次加载,如果它已经被另一个进程启动时间和更小的系统内存使用情况。
我认为主要的区别是如何处理异常。微软不建议在DLL静态链接到CRT,除非这样的后果是特别期望和理解:
例如,如果你在加载链接到其自己的静态的DLL的可执行文件调用
_set_se_translator
CRT中,由DLL中的代码生成的任何硬件异常不会被翻译器捕获,但会捕获主要可执行文件中的代码生成的硬件异常。
此线程讨论相同的事情:http://stackoverflow.com/questions/238465/static-or-dynamic-linking-the-crt-mfc-atl-etc – Laserallan 2009-08-04 17:23:45