无法在调试模式下编译解决方案,因为缺少MSVCR100D.dll文件

9

我正在运行 Microsoft Visual Studio Express 2012 for Windows Desktop,我的电脑是64位的,操作系统是Windows 8。

我创建了一个全新的Win32控制台应用程序(使用C++),并接受了默认选项。然后,我在调试模式和发布模式下构建和运行解决方案,它都可以正常工作。接下来,我为动态SFML库配置了包含和库目录。我链接到调试和发布的.lib文件,并将相应的.dll文件放入正确的目录中。然后,我添加了一些简单的代码使用该库,在调试模式下构建和运行应用程序时遇到此错误:“程序无法启动,因为缺少MSVCR100D.dll文件。尝试重新安装程序以解决此问题。”如果我在发布模式下构建和运行应用程序,它将无错误地工作。(我已经安装了32位和64位的redistributables)现在根据this线程的理解,.dll文件仅用于调试,不包含在可再分发的软件包中(这就解释了为什么在调试模式下无法工作)。答案说开发人员默认情况下已安装它与Visual Studio一起使用,但很明显这不是情况,因为错误提示,并且我已经重新安装了Visual Studio并重启了电脑两次。

总之,我如何在调试模式下简单编译我的解决方案而不会出现这个错误?

我担心有人会将此标记为重复,所以我们来看看:

  1. 链接 - "...你似乎正在链接运行时的调试版本,分发应用程序时不应链接调试版本的运行时。"

    这与我无关,因为我没有分发这个应用程序,只是在调试模式下尝试运行它。

  2. 链接 - "我使用 Microsoft Visual C++ 2010 Express Edition 编译我的程序,并尝试在另一台没有相同编译器的计算机上运行它。"

    这个人在将编译好的程序运行在不同的计算机上时出现了错误,而不是在编译应用程序时出现错误。

  3. 链接 - "如果您的发布版本遇到此错误..."

    我没有遇到这种情况。

  4. 链接 - "您可以在“Release”中编译您的项目..."

    我的项目还没有准备好发布,因此我应该在调试模式下编译我的项目。


你是否在使用为另一个版本的MSVC++编译的SFML?你需要获取正确的版本或者使用你的编译器自己从源代码编译。不过,感谢你的研究努力。 - Seth Carnegie
你需要的文件不是可再分发的文件,只有在你的计算机上安装了VS2010后才能获得它。你需要获取一个VS2012版本的SFML库来继续进行。看起来这将会很困难,因为它目前还没有在SFML网站上提供。 - Hans Passant
尝试下载 VS 2010 Express 并从中提取您需要的文件。此外,感谢所有那些链接的贡献者。 - user541686
3个回答

2

MSVCR100D.dll是Visual Studio 10的dll文件,因此某个地方有东西依赖它(SFML dll文件?)。使用Visual Studio 2012以调试模式编译的任何内容都需要MSVCR110D.dll,您应该已经在安装中拥有它。

我建议您在自己的Visual Studio版本上构建SFML,这很容易。实际上,站点上可用的二进制文件作为SFML 2.0 RC的一部分相当旧,通过从最新源代码构建,您将为自己提供巨大帮助,因为期间应用了许多修复和改进。

(另外,绝对要使用2.0而不是1.6。该网站相当具有误导性,但在SFML论坛上几乎每个人都会推荐您使用最新版本)


1
这条消息通常表示您的应用程序直接或间接地引用了缺失的dll文件。
末尾的“D”表示该文件是Debug版本,此DLL文件随Visual Studio 2010安装提供。因此,MSVCR100D.dll将随Visual Studio 2010的安装一起提供。
当然,您可能会缺少其他版本:2008年版(MSVCR90D)、2010年版(MSVCR100D)、2012年版(MSVCR110D)或2013年版(MSVCR120D),每个dll文件都根据Visual Studio版本提供。 有几种解决方法:
  1. 确保以发布模式编译项目的所有组件。如果这不能解决问题,请继续执行下一步。
  2. 您可以在本地安装Visual Studio 2010来解决此问题。这不是我推荐的方法,但它肯定可以克服这个问题。
  3. 您还可以从第三方网站下载文件,并将其复制到项目的bin目录中: http://www.dll-files.com/dllindex/dll-files.shtml?msvcr100d 这个选项是最不推荐的。
  4. 运行Dependency Walker并查看哪个文件依赖于MSVCR100D.dll,然后尝试修复该文件以打破您的依赖关系。您可以在此处下载depends:http://www.dependencywalker.com/

    请确保您的项目链接正确版本的CRT和任何其他库(例如MFC、ATL等)。

注意: 仅安装可再发行组件不能解决此问题,因为可再发行组件仅包含文件MSVCR100.dll的发布版本(请注意没有“D”)。

0

MSVCR100D是2010年Visual Studio软件包的一部分,这意味着您系统的某些组件是使用旧版本的Visual Studio进行编译的,因此您需要安装Visual Studio 2010版本。虽然您的机器上可能仍然可以使用2012版本进行开发,但只要[部分]2010版本存在即可。

或者您需要重新编译某些应用程序依赖的组件以使用2012年(msvcr110d)库——如果您拥有所有源代码,则这将是我首选的方法。


调试版本(MSVCR100D)不是Visual Studio 2010可再发行库的一部分。调试版本仅随Visual Studio一起提供。 - IInspectable

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