c++ - 并排 : 3rd Party Dll refers to two versions of MSVCR80. DLL

标签 c++ windows dll visual-studio-2005 side-by-side

我们包含一个 3rd Party lib+DLL,它最近在安装上造成了很多麻烦。使用dependencywalker ,我们发现dll本身引用了两个不同的Versions

MSVCR80.DLL:
Version 8.0.50727.4053 and
Version 8.0.50727.42

alt text http://img101.imageshack.us/img101/1734/dependencywalk2.jpg

在大多数情况下,即使我们不分发这两个版本,安装也不会出现问题。但在许多情况下,我们的安装并没有启动。然后我们在 SideBySide 管理器的 Windows 系统事件日志中找到消息:“DLL 版本不匹配”。在大多数情况下,这个问题可以通过安装 .NET 框架来解决(尽管我们不使用它)。但现在我们遇到了这样的情况。

我知道一个解决方案是将两个版本安装为一个共享程序集,但这似乎并不容易,除此之外我更喜欢一个更简单的解决方案。有人知道解决方法吗?

我能以某种方式只使用一个版本的 Dll 吗?

编辑: 我现在尝试了克里斯蒂安的建议:

D:\Develop\LEADTOOLS15\patch_maifest>mt.exe -inputresource:ltkrn15u.dll;#1 -out:old.manifest
Microsoft (R) Manifest Tool version 5.2.3790.2075
Copyright (c) Microsoft Corporation 2005.
All rights reserved.

mt.exe : general error c101008c: Failed to read the manifest from the resource of file "ltkrn15u.dll". Ressource not found.

如果我查看具有完整路径的 dll 依赖项,我会看到以下内容: alt text http://img340.imageshack.us/img340/4122/dependencywalk3.jpg

较低的 MSVCR80.DLL 版本为 ...42。我不明白这一点。为什么 MSVCP80.DLL 指的是一个不同版本的 MSVCR80.DLL 而不是它之外的版本。这可能是 dependencywalker 的问题吗?

最佳答案

您最好的选择是在您的应用程序安装程序包中提供所需的 DLL。至少使用您的第 3 方 DLL 所依赖的版本。

Microsoft 为其运行时 DLL (vcredits_*) 提供独立的安装程序。 VisualStudio 2005最新版可以下载here .这也是您的 DLL 所链接的版本。您可以从安装程序静默启动可再发行组件包。

作为已安装系统的手动解决方法,只需在目标机器上应用 redist 安装程序即可。

如果选择此方法,则无需担心版本冲突,因为依赖于旧版本的应用程序将被重定向为始终使用最新版本。

为了更好地理解,您可以查看此 MSDN articles .

关于c++ - 并排 : 3rd Party Dll refers to two versions of MSVCR80. DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1559490/

相关文章:

C++堆状态差异

python - 线程 Python 端口扫描器

c++ - 是否可以为同时使用 Windows 和 Linux 的客户端使用相同的 DLL

c++ - 无法引用库项目 (DLL),因为缺少 .lib 文件

c# - 在 Windows 服务中模拟用户

c++ - 导出 COM 注册信息

c++ - 将一个小型 C++ 项目从 XCode 移动到 Visual Studio。天花板/地板无法识别?

c++ - 无法在abs函数c++中使用字符串长度函数

c++ - OpenGL:使用多个纹理渲染到 FBO

c++ - 头球后卫似乎不起作用?