MSVCP110D.dll and Visual Studio 2013

MSVCP110D.dll and Visual Studio 2013

本文关键字:Studio 2013 Visual and dll MSVCP110D      更新时间:2023-10-16

我正在尝试运行我在Visual Studio 2013中编译的程序。但是,我收到错误

The program can't start because MSVCP110D.dll is missing from
your computer. Try reinstalling the program to fix this problem.

这不是一个非常有用的错误。但是,经过一些谷歌搜索,我发现它(显然)正在尝试动态加载标准c++库,为了解决这个问题,我需要指定/MT选项而不是/MD选项。这给我留下了一些问题:

  1. 这到底在做什么?
  2. /MT相比,/MD有什么好处?我的意思是,一定有一个原因,它是默认选项......
  3. 我将如何获得.dll的外观并让Visual Studio使用它?我下载了这个,但老实说不知道如何使用它。
  4. 最重要的是,如何让该错误消失并运行我的程序?

一些附加信息:我正在使用x64构建在Release模式下进行编译。

问题是你通过使用使用不同编译器编译的Qt混合了不同版本的Visual Studio。请记住,Visual Studio 的每个版本都有自己的运行时/CRT。使用 Visual Studio 2012 编译的 Qt dll,将依赖于 Visual Studio 2012 运行时。它们不会使用 2013 运行时。

此问题的解决方案是使用相同的编译器重新编译所有代码和依赖库/dll。

警告:一些用户会尝试从其他版本的Visual Studio安装动态运行时(或使用静态CRT重新编译依赖库),但这不是此问题的解决方案,主要是因为每个运行时都有自己的独立堆。拥有单独的堆可以并且将导致随机崩溃,因为在一个堆中分配内存,然后尝试在另一个堆中释放它。由于堆不共享有关分配或解除分配的信息,这会导致堆损坏。根据我的经验,问题并不总是导致即时崩溃。崩溃可能会也可能不会在下一次分配损坏堆时发生,因此调试这种情况可能会非常令人沮丧。