windows 缺少 msvcr80.dll

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/217266/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-15 11:29:21  来源:igfitidea点击:

Missing msvcr80.dll

c++windowsdlldependencies

提问by Steve

If the C++ runtime msvcr80.dll is missing from a compiled library, is there any way to determine which version was used to create the library or to get it to run on a later version of msvcr80.dll?

如果编译库中缺少 C++ 运行时 msvcr80.dll,是否有任何方法可以确定使用哪个版本来创建库或让它在更高版本的 msvcr80.dll 上运行?

回答by bk1e

The VC80 SP1 CRT redistributable package will install both the RTM and SP1 versions of the C runtime into %SystemRoot%\WinSxS(assuming you're using Windows XP or Vista; Windows 2000 doesn't support side-by-side assemblies). If you have VC8 installed, the CRT redistributable package is in %ProgramFiles%\Microsoft Visual Studio 8\VC\redist. If you don't have VC8 installed, I think you can download the CRT redistributable package from Microsoft.com.

VC80 SP1 CRT 可再发行包将安装 C 运行时的 RTM 和 SP1 版本%SystemRoot%\WinSxS(假设您使用的是 Windows XP 或 Vista;Windows 2000 不支持并行程序集)。如果您安装了 VC8,则 CRT 可再发行组件包位于%ProgramFiles%\Microsoft Visual Studio 8\VC\redist. 如果您没有安装 VC8,我想您可以从 Microsoft.com 下载 CRT 可再发行组件包。

Also, to find out exactly what CRT version (e.g. RTM vs. SP1) is needed by a binary that was built with VC8 or VC9, you can extract the manifest:

此外,要准确找出使用 VC8 或 VC9 构建的二进制文件需要哪个 CRT 版本(例如 RTM 与 SP1),您可以提取清单:

mt.exe -inputresource:mydll.dll;#1 -out:mydll.dll.manifest

Look for something like this:

寻找这样的东西:

<assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b">
</assemblyIdentity>

My executable requires CRT version 9.0.21022.8. This version number is also embedded in the WinSxSsubdirectory names (unfortunately it's surrounded by hashes):

我的可执行文件需要 CRT 版本 9.0.21022.8。这个版本号也嵌入在WinSxS子目录名称中(不幸的是它被哈希包围):

D:>dir c:\windows\WinSxS\*VC90.CRT*
12/14/2007  02:16 AM    <DIR>          amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b
12/14/2007  02:00 AM    <DIR>          x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_bcb86ed6ac711f91

回答by David Segonds

Dependency Walkerwill help you answer this question.

Dependency Walker将帮助您回答这个问题。

回答by GregC

If you're authoring and distributing the mentioned DLL, consider using a merge module for Visual C++ 8.0 CRT as part of your installer.

如果您正在创作和分发提到的 DLL,请考虑使用 Visual C++ 8.0 CRT 的合并模块作为安装程序的一部分。

I noticed that there is a new mt.exe tool and new Visual C++ CRT in Windows SDK 6.1. I use the merge module as a prerequisite in the InstallShield 12 installer with great success.

我注意到 Windows SDK 6.1 中有一个新的 mt.exe 工具和新的 Visual C++ CRT。我在 InstallShield 12 安装程序中使用合并模块作为先决条件,并取得了巨大成功。