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