【发布时间】:2012-03-20 19:03:48
【问题描述】:
我有一个old visual studio project(cuSVM 项目),以前在 32 位 WinXP 中使用 Visual Studio 2005 SP1。我想在我的 64 位 Win7 中运行它。我在 64 位模式下编译它,使用 Visual Studio 2008。但由于缺少一些 dll,它无法运行。
我使用了“Dependency Walker”,缺少的 dll 是:
- MSVCR80.DLL
- MSVCR90D.DLL
- IESHIMS.DLL
带有黄色问号,表示:“系统找不到指定的文件”。
在 DLL 树中,我在“c:\windows\system32\NVCUDA.DLL”中有一个红色的“NVCUDA.DLL”和一个红色块“IEFRAME.DLL”、“c:\windows\system32\IEFRAME.DLL” " 在此文件子树中。
和错误信息:
错误:未找到至少一个必需的隐式或转发依赖项。 错误:由于隐式依赖模块中缺少导出函数,至少一个模块具有未解析的导入。 警告:至少没有找到一个延迟加载依赖模块。 警告:由于延迟加载依赖模块中缺少导出功能,至少有一个模块存在未解析的导入。接下来我从 Visual Studio 安装中复制了“MSVCR80.DLL”和“MSVCR90D.DLL”文件:
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\amd64\Microsoft.VC90.DebugCRT
和 C:\Program Files (x86)\Microsoft Visual Studio 8\VC\redist\amd64\Microsoft.VC80.CRT
“MSVCR80.DLL”的文件版本是“8.0.50727.42”,“MSVCR90D.DLL”的文件版本是“9.0.21022.8”。
embed.manifest 文件信息为: type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b"
我对visual studio和dll文件有点了解,所以我真的需要你的帮助。
【问题讨论】:
-
您已经混合了来自不同版本 Visual Studio 的发布和调试 DLL。确保使用相同版本的 VS 在发布或调试中构建所有内容。这包括依赖项。
-
您的意思是我必须使用Visual Studio 2005 编译项目吗?如果我使用 Visual Studio 2008,我需要仅存在于 Visual Studio 2005 安装文件夹中的“MSVCR80.DLL”。为什么程序在 Visual Studio 2008 中编译时需要 MSVCR80.DLL?
-
我在我的电脑上搜索了“IESHIMS.DLL”,有不同大小的不同版本。我使用的是位于 "C:\Program Files\Internet Explorer" 中的版本,是真的吗?
-
很可能你的项目所依赖的东西(你是否链接到某个东西?)是使用 Visual Studio 2005 构建的。这会产生对 VS 2005 相关 DLL 的依赖。确保您使用的所有内容(包括依赖项)都是使用相同的 VS 版本构建的。现在不用担心 IESHIMS.DLL。 Dependency Walker 有时会给您带来误报。
-
快速浏览一下项目,似乎对 Matlab 库有依赖?他们为什么版本的 Visual Studio 编译?您很可能会在 Matlab 的文档中找到它...
标签: visual-studio dll cuda 32bit-64bit mex