msvcr100优于msvcrt的优点

use*_*040 4 c++ msvcrt visual-studio-2010

我想问一下msvcr100与msvcrt相比是否有优势,优势是什么?

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

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

谢谢.

Han*_*ant 5

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

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

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


Dav*_*nan 4

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

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

mingw 编译器是非常可配置的。但是,我相信它通常会链接到 msvcrt.dll。由于 msvcrt.dll 是一个系统 DLL(自 Windows 2000 IIRC 起),因此您不需要分发它。

我假设您动态链接到运行时。这是首选选项,但始终可以静态链接到运行时。当您这样做时,您的应用程序就变得独立了。

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