【问题标题】:"DLL not found error " could not be fixed although I downloaded missing related-DLLs尽管我下载了缺少的相关 DLL,但“找不到 DLL 错误”无法修复
【发布时间】:2014-10-28 09:03:52
【问题描述】:

我从 c++ 创建了一个 Dll 文件,然后在 c# 文件中调用它。 它工作正常。

但是当我尝试将文件导出到另一台计算机时。我遇到了这个异常:找不到 DLL。

我下载了dependency walker 来修复错误,因为我认为我的DLL 依赖于第二台计算机中缺少的其他DLL;然后我下载了丢失的 DLL。

但我仍然遇到同样的错误。

Dependency Walker 也给了我这个消息:应用程序无法启动,因为它的并排配置不正确。 你认为这可能是一个线索吗?

请提供帮助。 谢谢

【问题讨论】:

  • DLL 是“相同位数”(64 位还是 32 位)?
  • 你能在 Windows 日志中看到丢失的 dll 的名称吗?
  • 你没有提到缺少什么 dll,我认为它是 C++ 运行时。对于使用 SxS 的 VC++ 版本,最好使用运行时安装程序进行安装。 SxS 有许多问题,最好通过使用正确的安装程序来避免这些问题。
  • Mats Petersoon,是的,我确保“位”是相同的 32 位 Ali Kazmi,不,它没有给我这个名字。 Dependency Walker 给了我一个,我已经下载了。 Niall,如何解决 C++ 运行时问题?你能解释一下吗?谢谢大家的及时回答
  • 您可以在事件查看器、Windows 日志、应用程序中找到丢失的 dll 的名称。

标签: c# c++ dll dependency-walker


【解决方案1】:
  • 您需要在客户端计算机上安装适当的 VC++ 运行时。 VC++ 运行时必须与位数(32 位或 64 位)以及您正在使用的服务包匹配(请参阅关于对话框 - 左侧,而不是右侧(即 . NET))。
  • 您可以使用/MT 编译器选项将所有依赖的DLL 放入您的DLL(或EXE)中。
  • 如果您使用 MFC,请使用“在静态库中使用 MFC”

【讨论】:

  • 大家好,我已尝试卸载并重新安装 Microsoft Re-distributable,但问题仍然存在。 Dependency Walker 报告说 MSVCR80D.DLL 丢失了,我认为我正确安装了它。然而在事件查看器中,事件被记录为:“c:\dll_en\DES_EN_20140123DLL.DLL”的激活上下文生成失败。相关程序集 Microsoft.VC80.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.762" 找不到。请使用 sxstrace.exe 进行详细诊断。我现在有点不知所措
  • 80D - 给你。您需要构建发布版本,而不是调试版本。检查发布文件夹!
  • Ajay,从发布文件夹中我也得到了同样的东西。虽然很沮丧,但整天都在努力......
【解决方案2】:

到目前为止我做了什么

  1. 我下载了 Dependency Walker 以检查是否有任何缺失的依赖 DLL。
  2. Dependency Walker 发现并行配置不正确,并建议使用 sxstrace.exe 工具(命令提示符)跟踪事件: http://ntcoder.com/bab/2014/02/27/troubleshooting-side-by-side-issues-using-sxstrace/

  3. 然后我用事件查看器确认了错误的性质,它给了我以下消息: 相关程序集 Microsoft.VC80.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.762" 找不到。请使用 sxstrace.exe 进行详细诊断。

  4. 我从http://www.microsoft.com/en-us/download/details.aspx?id=5638 安装了 Microsoft Visual C++ 2005 SP1 Redistributable Package (x86) 8.0.50727.762 版本。因为显然问题似乎来自于我的 DLL 是用 VC80 CRT 编译的,需要一个来运行。

  5. 然后我回到主计算机上只是重新检查并发现它是 64 位的,我确定这是错误的来源。很抱歉没有从一开始就知道这一点。

【讨论】:

    【解决方案3】:

    主要问题是第一台计算机是 32 位的,而第二台计算机是 64 位的。我使用第二台计算机从我的源代码(生成 DLL 的那个)重新加载了 DLL 文件,它工作正常。

    在使用 DLL 的程序中,我插入了一个代码来测试主机是 32 位还是 64 位,然后我会调用相应的 dll。

    效果很好。 谢谢大家

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-16
      • 1970-01-01
      • 2018-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多