c++ - msvcr100 相对于 msvcrt 的优势

标签 c++ visual-studio-2010 msvcrt

我想问问 msvcr100 是否比 msvcrt 有优势,优势是什么。

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

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

谢谢。

最佳答案

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

当您发现您使用 CRT 的方式导致特定 Windows 版本失败时,您会非常头疼。包括那种需要时间机器的失败,新版本的Windows可能会有一个新的msvcrt.dll拷贝,让你的程序失败。一个也称为 DLL hell 的问题。

使用 msvcr100.dll 的优点是发生的几率小得多。您使用的是 已知 版本的 CRT。即使 Windows 本身有破坏 msvcr100.dll 的重大更改,仍然有一个解决方案:您可以更新它。这对于 msvcr.dll 是不可能的,它是一个包含在文件系统保护功能中的 DLL。用安装程序覆盖它通常是非常灾难性的,因为这会破坏 Windows 本身。但它不会导致失败,Windows 会自动恢复它。这也是您不应该听从 Voith 的建议的原因。

关于c++ - msvcr100 相对于 msvcrt 的优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17883665/

相关文章:

c++ - 这种用虚拟保护方法扩展库的方法安全吗?

c++ - 位域是否比掩码位和手动提取数据更有效(在计算上)?

visual-studio-2010 - 如何更改 Visual Studio Extension 中菜单命令的图标?

python - msvcrt.getch() 每次都会检测到空格

python - PyCharm:msvcrt.kbhit() 和 msvcrt.getch() 不起作用?

c++ - OSX 10.10 CMake 3.0.2 和 clang 找不到本地 header

c++ - 从 void 指针推导出类型

c# - 这是一个错误吗? MissingMethodException 以 0 作为参数访问私有(private)静态方法

c++ - VS2010 可以显示哪个头文件拉入声明吗?

c++ - Windows Mobile 中的_CrtDbgReport 输出在哪里?