我想问一下 msvcr100 是否比 msvcrt 有优势,优势是什么。
使用 msvc 编译器编译时,我得到的可执行文件链接到 msvcr100,因此需要安装 MS Visual C++ Redistributable。如果我用 g++ (mingw) 编译它,那么就没有这样的要求。我猜它与 msvcrt 相关联,而不是。
我更喜欢将依赖关系保持在最低限度,所以我想知道使用链接到 mscvr100 的编译器是否有任何意义。
谢谢你。
我想问一下 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 Hell 的问题。
使用 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,那么您需要接受运行时分发,或静态链接。