Dll vs static lib(MSVC9 RunTime Library选项)

时间:2011-07-23 08:33:31

标签: c++ visual-studio dll settings

对于MSVC9 Win32项目,以下选项显示在Configuration Properties - >下。 C / C ++ - > Code Geberation - >运行时库:

/ MT,/ MTd,/ MD,/ MDd

是否正确使用DLL / MTd和静态lib / MDd?

感谢。

1 个答案:

答案 0 :(得分:5)

这里有两个问题。

首先,您需要选择是否需要CRT的调试版本或发布版本。调试版本具有特殊检查和代码路径,旨在帮助您在编写应用程序时捕获错误。您应该将它们用于应用程序的最终发布版本,因为它们可能会降低其执行速度,并且因为它们不能自由地再发布。

然后,您需要确定是否要静态将运行时链接到您的应用程序,或者是否要从DLL中使用动态。静态链接允许您创建独立的EXE文件,不依赖于任何DLL文件;它有效地将运行时代码编译到应用程序的二进制文件中。这可以使部署更容易,但其代价是无法利用对运行时DLL进行的安全性和其他更新。您必须重新编译应用程序才能利用新的运行时更新。动态链接是Windows应用程序的典型(和推荐)路径。这意味着您的应用程序将需要存在适当版本的CRT DLL才能运行它,但它允许运行时库轻松更新,这意味着多个程序可以共享相同的代码,从而减小其大小在磁盘上。

因此,/MD表示动态链接,/MT表示静态链接。每个选项后面的小写d表示使用了 debug 版本的运行时库。

  

/ MD =动态链接到CRT的发布(可再发行)版本

     

/ MDd =动态链接到CRT的调试(不可再发行)版本

     

/ MT =静态链接到CRT的发布(可再发行)版本

     

/ MTd =静态链接到CRT的调试(不可再发行)版本

有关详情,请参阅MSDN