【发布时间】: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