从另一台 PC/VS 构建/运行项目时缺少MSVCR100D.dll

MSVCR100D.dll is missing when build/running project from another PC/VS

提问人:RaenirSalazar 提问时间:4/16/2014 最后编辑:Michael IVRaenirSalazar 更新时间:10/25/2015 访问量:2505

问:

我上传了我的(VS2013)项目文件夹并将其提供给团队的其他成员,但是当他们尝试使用Visual Studio 2012构建/运行它时,他们遇到了这个错误,这也发生在他们的Visual Studio 2013版本上。

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

他们重新安装了VS2010,但没有去。

我还尝试通过在代码生成选项中使用 /MT 静态链接我的项目,但现在我得到:

Unresolved External Symbol __free_dbg libcmptd.lib cout.obj

....25 更多...

我怎样才能得到它,以便我的项目可以在我的团队成员电脑上构建/运行?如何解决未解决的外部问题?这似乎纯粹发生在常规 Microsoft 文件中。

C++ visual-studio-2013 未解析的外部

评论

0赞 drescherjm 4/16/2014
您需要删除 Visual Studio 2010 依赖项。是否所有依赖库/dll 都是使用 Visual Studio 2013 生成的?
1赞 Hans Passant 4/16/2014
所以你得到了一个用 VS2013 制作的调试版本,希望它与拥有 VS2012 的队友一起运行,实际上需要安装 VS2010。听起来像一个动物园,小心狮子。如果你真的打算支持所有这些版本,那么让团队成员从源代码构建。这就是每个人的工作方式。有一个明显的好处,即您不必自己解决所有问题。
0赞 RaenirSalazar 4/16/2014
他们确实有源代码,他们从我的 sln 文件中打开它,从选项中选择他们的 MVS 版本,单击重建,然后运行 / f5。然后,它会提示上述错误。

答:

-2赞 Mr.C64 4/16/2014 #1

在您的项目中,您是否可能以某种方式使用一些使用 Visual Studio 2010 构建的组件/库,这需要 MSVCR100D DLL?

评论

0赞 RaenirSalazar 4/16/2014
为了回答你和 dresherjm,我实际上不知道,而且可能不是(因为并非所有东西都使用 2013),因为我使用 assimp 进行模型加载,所以我怀疑它是用 2010 或任何 linux 使用的。我使用 freeglut、glew、glm 和 assimp 作为依赖项。
1赞 drescherjm 4/16/2014
除非这些是静态库(即使这样也可能有问题),否则如果要使用 Visual Studio 2013,则需要查找这些依赖项的 Visual Studio 2013 版本。对于我的项目,我自己为我使用的每个编译器编译我所有的开源依赖项。
0赞 RaenirSalazar 4/16/2014
是的,我最初尝试过我自己,但由于各种原因,其中一个在我的脸上爆炸了。我相信 Assimp 特别顽固地拒绝编译,而且说明非常糟糕和模糊。但这并不能真正解释整个项目不能在另一台计算机上的 VS2013 环境中工作,而在我的计算机上工作(确实如此)。
0赞 drescherjm 4/16/2014
如果有人安装了 Visual Studio 2010 编译器(或 VS2010 的 crt dll),它看起来可以工作,但这不是一个好的解决方案,因为它可能会导致应用程序崩溃,因为您在执行此操作时使用了 2 个不同的独立堆。您不能在 1 个堆中分配内存并在一秒钟内释放它,这将导致堆损坏和随机崩溃。
1赞 Ivan Aksamentov - Drop 10/25/2015
这不是一个答案
0赞 Merav Kochavi 10/25/2015 #2

此消息通常表示 dll 在应用程序中直接或间接引用,并且丢失。

末尾的“D”向我们显示这是文件的调试版本,这是 Visual Studio 2010 安装提供的 DLL 文件。因此,MSVCR100D.dll将在安装 Visual Studio 2010 时提供。

当然,您可能缺少其他版本2008(MSVCR90D),2010(MSVCR100D),2012(MSVCR110D)或2013(MSVCR120D),每个dll都是根据Visual Studio版本提供的。

有几种方法可以解决这个问题:

  1. 检查以确保您正在编译 项目处于发布模式。如果这不能解决问题,请继续 到后续步骤。
  2. 您可以通过在 机器。这不是我会推荐的,但它肯定会 克服问题
  3. 您也可以从此第三方网站下载文件,然后 将其复制到您的项目箱中: http://www.dll-files.com/dllindex/dll-files.shtml?msvcr100d
    此选项是最不推荐的选项。
  4. 运行 dependency Walker 并查看哪个文件依赖于MSVCR100D.dll 并尝试修复该文件以破坏您的依赖关系。您可以在此处下载: http://www.dependencywalker.com/

    检查以确保您的项目链接了正确的版本 CRT 和您可能正在使用的任何其他库(例如 MFC、ATL、 等)

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

评论

0赞 Ivan Aksamentov - Drop 10/25/2015
实际上,选项 2 是非法的,因为它违反了 Microsoft 软件许可条款。请参见: 重新分发可视 C++ 文件
0赞 Merav Kochavi 10/25/2015
感谢您的评论,我将附加选项 2
0赞 Ivan Aksamentov - Drop 10/25/2015 #3

您正在混合使用不同版本的编译器构建的 C++ 库(正如我们所知,其中一些库与 VC10 运行时库的调试动态版本相关联)。不支持这样做,因为不同的编译器版本具有不同的 ABI。

要解决混乱的问题,您需要找到使用与项目参数匹配的参数构建的库。它们应该被构建:

  • 使用相同的编译器版本(例如 VS 2013)
  • 具有相同配置(调试/发布)
  • 针对同一平台 (x86/x64/ARM)
  • 针对相同的运行时库变体(静态/动态 + 调试/发布)

您可以尝试在 Web 上查找预构建版本,也可以从源代码中自行构建库。通常,您需要为项目提供多个配置/平台,因此,您将需要多个版本的库。

如果你的搜索不成功(例如,如果一个闭源库没有VS2013版本),你可以将你的项目回滚到另一个版本的编译器并重新开始。

任何链接不兼容库的尝试,即使以某种方式成功,也会导致随机崩溃。