MSVCP110D.dll和Visual Studio 2013

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.

这不是一个非常有帮助的错误提示。但是,经过一些谷歌搜索,我发现它(显然)正在尝试动态加载标准的库,为了避免这种情况,我需要指定/MT选项而不是/MD选项。这给我留下了一些问题:
  1. 那到底是在做什么?
  2. /MD相比于/MT的好处是什么?我的意思是,肯定有一个原因它是默认选项...
  3. 我该如何获取所需的.dll并让Visual Studio使用它?我下载了这个,但是实际上不知道如何使用它。
  4. 最重要的是,如何消除那个错误并使我的程序运行?
一些额外的信息:我正在使用x64构建,在Release模式下编译。

该项目最初是使用VS2012构建的。为什么现在还在寻找它? - MirroredFate
1
你在可再分发的文件中找不到这个dll,因为调试dll是不可再分发的。 - drescherjm
你在发布模式下遇到了这个问题?这很不正常。 - drescherjm
1
你使用 Visual Studio 2013 构建 Qt 了吗?不能使用 Visual Studio 2012 版本。 - drescherjm
2
我认为@drescherjm描述了问题。您需要使用Visual Studio 2013构建应用程序及其使用的所有库。 - Raman Sharma
显示剩余6条评论
1个回答

14
问题在于您在使用编译器不同的Qt时混合了不同版本的Visual Studio。请记住,每个Visual Studio版本都有自己的运行时/CRT。与Visual Studio 2012一起编译的Qt dll将依赖于Visual Studio 2012运行时,而不会使用2013运行时。
解决此问题的方法是使用相同的编译器重新编译所有代码和相关库/ dll。
警告: 一些用户将尝试仅从其他版本的Visual Studio安装动态运行时(或重新编译具有静态CRT的相关库),但这并不是解决此问题的方法,主要是因为每个运行时都有自己独立的堆。拥有单独的堆可以导致随机崩溃,原因是在一个堆中分配内存,然后尝试在另一个堆中释放它。由于堆不共享有关分配或释放的信息,因此会导致堆损坏。根据我的经验,该问题并不总是会引起即时崩溃。崩溃可能会在下一个分配损坏的堆时发生或不发生,因此调试此情况可能非常令人沮丧。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接