msvcr100优于msvcrt的优点

时间:2013-07-26 14:12:16

标签: c++ visual-studio-2010 msvcrt

我想问一下msvcr100在msvcrt上是否有优势,有什么好处。

使用msvc编译器进行编译时,我得到的可执行文件链接到msvcr100,因此需要安装MS Visual C ++ Redistributable。如果我用g ++(mingw)编译它,那么没有这样的要求。我猜它与msvcrt相关联,而不是。

我更喜欢将依赖关系保持在最低限度,所以我想知道使用链接到mscvr100的编译器是否有任何意义。

谢谢。

2 个答案:

答案 0 :(得分:5)

Msvcrt.dll是一个私有 DLL,仅供Windows本身使用。不同版本的Windows具有不同版本的msvcrt.dll。

当您发现使用CRT的方式导致特定Windows版本出现故障时,您会非常头疼。包括需要时间机器的故障类型,新版本的Windows可能有一个新的msvcrt.dll副本,使您的程序失败。一个问题,也称为DLL Hell。

使用msvcr100.dll的优点是发生的可能性很多更小。您使用CRT的已知版本。即使Windows本身发生了重大变化,也破坏了msvcr100.dll,那么仍然有一个解决方案:你可以更新它。使用msvcr.dll是不可能的,它是文件系统保护功能所涵盖的DLL。用安装程序覆盖它通常是非常灾难性的,因为这可能会破坏Windows本身。但它不能导致失败,Windows会自动恢复它。也是你不应该遵循福伊特的建议的原因。

答案 1 :(得分:3)

如果您使用的是晚于版本6的MS编译器,则必须链接到特定于该编译器的运行时。你在这件事上没有任何选择。由于MSVC运行时不是系统DLL,因此您需要将它们与您的应用程序一起分发。

如果您使用MSVC6或可以链接msvcrt.dll的编译器,那么您可以链接msvcrt.dll。

mingw编译器非常易于配置。但是,我相信它通常会链接到msvcrt.dll。由于msvcrt.dll是一个系统DLL(从Windows 2000 IIRC开始),因此您无需分发它。

我假设所有这些都是动态链接到运行时的。这是首选选项,但始终可以静态链接到运行时。当您这样做时,您可以使您的应用程序独立。

这一切归结为您更喜欢使用哪种编译器。如果您更喜欢使用现代MSVC,那么您需要接受运行时分发或静态链接。