【问题标题】:What version of the C Run-Time Library (CRT) is being loaded?正在加载哪个版本的 C 运行时库 (CRT)?
【发布时间】:2011-06-13 05:28:32
【问题描述】:

我有一个错误,我怀疑这可能是由于在运行 Windows 7 的两台计算机上加载了不同版本的 CRT 造成的。如何确定正在加载 winsxs 文件夹中的 MSVCR90.dll 版本?

我的程序是由另一个 EXE 加载的 DLL。它是使用 Visual Studio 2008 SP1 编译的。

【问题讨论】:

  • 有什么问题?当您的应用程序加载或根本不加载时,您是否收到错误消息?您还可以检查 EXE 和 DLL 的清单,以查看它们需要哪个版本的 CRT。
  • 具体问题在这里,但我并没有因为这些细节而偏离这个问题:stackoverflow.com/questions/4752708/…

标签: visual-studio windows-7 msvcrt


【解决方案1】:

正如 Al Kepp 回答的那样,您可以使用 Dependency Walker,“Depends.exe”。对于动态加载的 DLL,最好的方法是在应用程序加载您的库时对其进行分析。

在 Dependency Walker 中打开 EXE,不是您的 DLL。然后点击“Profile-->Start Profiling”。如果应用程序需要参数,您可以在打开的窗口中提供它们,否则只需单击“确定”启动程序。程序打开后,以正常方式使用它,以便加载您的 DLL。现在您的 DLL 已加载,您应该能够在 Dependency Walker 中浏览树以查看正在使用的 CRT 版本。

如果您看不到版本,请确保通过单击“C:\”按钮在树中显示完整路径。

您还可以通过检查清单来查看应用程序或库请求的 CRT 版本,清单通常包含但不总是包含在 DLL 或 EXE 中。在 Visual Studio 中,单击“文件->打开->文件...”并选择 EXE 或 DLL。打开 RT_MANIFEST 资源,您应该会看到一些 XML,其中列出了 CRT 作为依赖项和版本。

【讨论】:

    【解决方案2】:

    在 DLL 文件中使用这些语言库的大多数应用程序只使用 Windows 目录中这些 DLL 的最新版本。如果您出于某种原因需要某个特定版本,您可以做的最简单的方法可能是将这些正确的文件与您的 exe 放在同一目录中。

    您可以使用 Dependency Walker 应用程序查看启动时将哪些 DLL 文件加载到您的进程中。您可以从 Microsoft 网站免费下载。

    【讨论】:

    • 我不确定是否需要特定版本。我希望弄清楚两台计算机正在加载哪个版本。当我尝试使用 Dependency Walker 时,它会在该 DLL 文件上显示“打开文件时出错”消息。
    • 您必须在 Dependency Walker 中打开 EXE 文件,而不是 DLL。然后它应该通知您所有静态绑定到它的 DLL(并且不显示错误)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多