【问题标题】:Visual C Run-time libraries missing缺少 Visual C 运行时库
【发布时间】:2016-04-16 03:36:09
【问题描述】:

这几天我一直在失眠:

我正在使用 SFML 创建一个应用程序,一切都很好,直到几天前我创建了一个新项目。之后,每当我尝试编译使用 SFML 库的解决方案时,我都会遇到链接器错误和缺少 DLL 文件。

我环顾四周,发现了一个名为 dependency walker 的程序,它查看程序所依赖的 DLL 文件。显然我的程序可执行文件丢失了一些应该位于 windows 目录中的 DLL 文件。

我吓了一跳,然后才发现它们都有前缀“CRT”和后缀 none 或“D”,这意味着它们是 Visual C 运行时库 DLL。

即使我的电脑没有丢失重要的 DLL,我仍然需要解决这个问题。不,在出现问题之前,我的 PC 没有重大的硬件/软件更改(我没有防病毒软件,只是相信我的直觉,我已经 5 年没有遇到问题了),是的,我确定我' m 按照tutorial 正确设置SFML 目录。

我已经尝试重新安装和修复 VS 以及我的 VS 版本的可再发行 VC(Win 桌面版是 2012 express),尝试干净启动、Windows 自我文件检查 (sfc /scannow),还尝试手动放置 DLL进入依赖walker说我丢失的目录。

有没有其他人遇到过这种情况?你是怎么解决的?

*有趣的提示:我可以访问学校网络上的管理员帐户,并在那里的计算机上安装了 VS,以查看问题是否会再次发生。由于这些机器上的 windows 目录从未被修改过,VS 执行得很好。难道是我需要一个干净的窗户安装?

【问题讨论】:

  • CRT 问题可能是一个巨大的痛苦,我会提到我过去遇到的一个问题以及我们必须如何解决它以防它适用于您。由于 3rd 方库及其依赖项,我们的应用程序在清单中有多个 CRT 条目。 Windows 不喜欢这样,它可能会导致问题,在这种情况下,它在 Windows 目录中找到了第 3 方 CRT 版本,之后只会在那里查找 CRT 文件并忽略我们在本地目录中修补的 CRT 文件。我们必须将清单外部化,将其清理为只有我们的 CRT 条目(单个条目),然后将其签入以使其永久化。
  • 抱歉,字数限制。我们花了几天时间试图追踪自己的问题,并且几乎没有关于这种行为的文档。它可以在某些机器上工作,但在其他机器上不能工作,这完全取决于这些机器修补到 Windows 的内容以及它们是否具有我们需要的当前 CRT(在构建时从 Windows 头文件中提取)。由于缺少的 DLL 是 CRT DLL,也许您有类似的问题?
  • 非常感谢 Scott,我查看了它,发现第 3 方 DLL 正在调用我的 windows 目录中缺少的 CRT DLL,我所要做的就是替换那些。

标签: c++ windows visual-studio-2012 dependencies crt


【解决方案1】:

我不确定是否允许 OP 在他自己的线程上回答(或者是否有时间限制),但这里是:

我冷静地看了之后解决了我的问题。我重新检查了我的 SFML 库的版本,不确定它们是 64 位还是 32 位,所以我重新下载了兼容的 32 位版本(因为我的调试编译器设置为在 32 位上运行)使用我的 VS 版本。这将我从缺少 MSVCP140D.dll 得到的错误更改为 MSVCO120D.dll(数字根据架构对应)。

我用谷歌搜索/询问了一会儿,发现我需要一个名为 MSVCR120D.dll 的文件,该文件在 system32 中找到,但在 SysWoW64 中没有。在放置了相应的体系结构 DLL 文件(system32 为 64 位,SysWow64 为 32 位)后,它终于工作了!

即使依赖遍历器仍然说可执行文件缺少 6-7 个其他 DLL 文件,该项目仍然可以编译并运行良好。

我希望这不是只适用于我的解决方案,我见过很多其他人有同样的问题。

【讨论】:

  • 这将我从缺少 MSVCP140D.dll 得到的错误更改为 MSVCO120D.dll 这意味着您下载的原始二进制文件是为 Visual Studio 编译的2015 和新的二进制文件是为 Visual Studio 2013 编译的。你不应该将 Visual Studio 2013 二进制文件与 Visual Studio 2012 一起使用。这将导致未定义的行为(由于具有超过 1 个 CRT 和堆),即使它看起来工作。
  • 是的,我不知道它为什么有效,但我确定我下载了Visual Studio 2012 libraries
  • 您想要Visual C++ 11 (2012) 库。如果这些依赖于 Visual Studio 2013,我会说需要在损坏的包装上提交错误报告。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多