use*_*040 4 c++ msvcrt visual-studio-2010
我想问一下msvcr100与msvcrt相比是否有优势,优势是什么?
使用msvc编译器进行编译时,我得到的可执行文件链接到msvcr100,因此需要安装MS Visual C++ Redistributable.如果我用g ++(mingw)编译它,那么没有这样的要求.我猜它与msvcrt相关联,而不是.
我更喜欢将依赖关系保持在最低限度,所以我想知道使用链接到mscvr100的编译器是否有任何意义.
谢谢.
Msvcrt.dll是一个私有 DLL,仅供Windows本身使用.不同版本的Windows具有不同版本的msvcrt.dll.
当您发现使用CRT的方式导致特定Windows版本出现故障时,您会非常头疼.包括需要时间机器的故障类型,新版本的Windows可能有一个新的msvcrt.dll副本,使您的程序失败.一个问题,也称为DLL地狱.
使用msvcr100.dll的优点是发生的几率要小得多.您使用已知版本的CRT.即使Windows本身发生了重大变化,也破坏了msvcr100.dll,那么仍然有一个解决方案:你可以更新它.使用msvcr.dll是不可能的,它是文件系统保护功能所涵盖的DLL.用安装程序覆盖它通常是非常灾难性的,因为这可能会破坏Windows本身.但它不能导致失败,Windows会自动恢复它.也是你不应该遵循福伊特的建议的原因.
如果您使用版本 6 之后的 MS 编译器,则必须链接到特定于该编译器的运行时。在这件事上你没有任何选择。由于 MSVC 运行时不是系统 DLL,因此您需要将它们与应用程序一起分发。
如果您使用 MSVC6 或可以链接 msvcrt.dll 的编译器,则可以链接 msvcrt.dll。
mingw 编译器是非常可配置的。但是,我相信它通常会链接到 msvcrt.dll。由于 msvcrt.dll 是一个系统 DLL(自 Windows 2000 IIRC 起),因此您不需要分发它。
我假设您动态链接到运行时。这是首选选项,但始终可以静态链接到运行时。当您这样做时,您的应用程序就变得独立了。
这一切都归结为您更喜欢使用哪种编译器。如果您更喜欢使用现代 MSVC,那么您需要接受运行时分发或静态链接。
归档时间: |
|
查看次数: |
1205 次 |
最近记录: |