6

我正在尝试运行我在 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. /MD相对于 有什么好处/MT?我的意思是,必须有一个原因,它是默认选项......
  3. 我将如何去寻找.dll并让 Visual Studio 使用它?我下载了这个,但老实说不知道如何使用它。
  4. 最重要的是,如何让该错误消失并让我的程序运行?

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

4

1 回答 1

14

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

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

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

于 2013-11-08T13:46:48.467 回答