我正在尝试运行我在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
选项而不是{{1 }} 选项。这给我留下了许多问题:
/MD
与/MD
相比有什么好处?我的意思是,必须有一个原因,它是默认选项...... /MT
并让Visual Studio使用它?我下载了this,但老实说不知道如何使用它。其他一些信息:我使用.dll
版本在Release
模式下进行编译。
答案 0 :(得分:14)
问题是您使用使用不同编译器编译的Qt混合不同版本的Visual Studio。请记住,每个版本的Visual Studio都有自己的运行时/ CRT。使用Visual Studio 2012编译的Qt dll将依赖于Visual Studio 2012运行时。他们不会使用2013运行时。
此问题的解决方案是使用相同的编译器重新编译所有代码和依赖库/ dll。
警告:强> 有些用户会尝试从其他版本的Visual Studio安装动态运行时(或使用静态CRT重新编译依赖库),但这不是这个问题的解决方案,主要是因为每个运行时都有自己的独立堆。具有单独的堆可以并且将导致由于在一个堆中分配存储器然后尝试在不同的堆中释放它而导致的随机崩溃。由于堆不共享有关分配或解除分配的信息,因此导致损坏堆。根据我的经验,问题并不总是导致即时崩溃。崩溃堆的下一次分配可能会或可能不会发生崩溃,因此调试这种情况可能非常令人沮丧。