我在 vs2010 上有一个 mfc c++ 项目。我可以在调试和发布模式下构建它,但是当我在调试模式下运行它时,它会出现以下 mfc100d.dll 错误。我还安装了 C++ 运行时环境vcredist_x86.exe
,但问题仍未解决。此外,我已将多线程 DLL (/MD) 设置为运行时库。我如何解决它 ?
2 回答
DLL 名称的d
后缀表明它是运行时 DLL 的调试版本。您说问题发生在您尝试运行应用程序的调试版本时,这一事实证实了这一点。
默认情况下,并且有充分的理由,调试构建链接到运行时库的调试版本。这些版本不可再分发,因此不会与可再分发包 ( vcredist_x86.exe
) 一起安装。这通常不是问题:您不应该发布应用程序的调试版本。
但是,不可再分发的调试库是随 Visual Studio 一起安装的,因此您的应用程序的调试版本应该可以在您用于开发和构建它的计算机上正常运行。这很可能是您将用来调试它的同一台计算机。
此外,我已将多线程 DLL (/MD) 设置为运行时库。
对此需要注意的三个重要事项:
您必须确保将其设置为正确的构建配置(即“调试”)。
不建议这样做。应用程序的调试版本应使用运行时库的调试版本。他们在幕后做了很多事情来帮助你捕捉错误。这就是它们存在的原因。如果您不希望依赖于运行时库的调试版本,请编译并分发您的应用程序的发布版本。
该开关会更改应用程序链接到的C/C++运行时库的版本。您收到错误消息的 DLL 是MFC运行时库。
MFC 标头测试是否
_DEBUG
定义了预处理器符号,以确定应链接到哪个版本的运行时库。由于_DEBUG
在调试版本中自动定义,因此它在 MFC 库的调试版本中链接。要改变这一点,您将需要做大量的体力劳动,在包含 MFC 标头之前取消定义此符号,然后再重新定义它。
或者,您可以静态链接到 MFC,这是项目属性中的设置。但请注意这一点:您最终会无意中混合了 CRT 的版本,这可能会让您陷入痛苦的世界。最好只发布发布版本并保留调试版本以进行内部调试。
重新安装 Microsoft SDK 修复了此错误。