缺少msvcr80.dll

时间:2008-10-20 01:05:32

标签: c++ windows dll dependencies

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

3 个答案:

答案 0 :(得分:13)

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可再发行组件包。

另外,要确切了解使用VC8或VC9构建的二进制文件所需的CRT版本(例如RTM与SP1),您可以提取清单:

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

寻找类似的东西:

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

我的可执行文件需要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

答案 1 :(得分:10)

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

答案 2 :(得分:3)

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

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