【发布时间】:2010-09-18 01:14:24
【问题描述】:
如果编译的库中缺少 C++ 运行时 msvcr80.dll,是否有任何方法可以确定使用哪个版本来创建库或让它在更高版本的 msvcr80.dll 上运行?
【问题讨论】:
标签: c++ windows dll dependencies
如果编译的库中缺少 C++ 运行时 msvcr80.dll,是否有任何方法可以确定使用哪个版本来创建库或让它在更高版本的 msvcr80.dll 上运行?
【问题讨论】:
标签: c++ windows dll dependencies
如果您正在创作和分发上述 DLL,请考虑使用 Visual C++ 8.0 CRT 的合并模块作为安装程序的一部分。
我注意到在 Windows SDK 6.1 中有一个新的 mt.exe 工具和新的 Visual C++ CRT。我在 InstallShield 12 安装程序中使用合并模块作为先决条件,并取得了巨大成功。
【讨论】:
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
【讨论】:
Dependency Walker 会帮你回答这个问题。
【讨论】: