3

这是我的配置:

  • 计算机 A - Windows 7、MS Visual Studio 2005 为 Win7 兼容性打了补丁 (8.0.50727.867)
  • 计算机 B - 已安装 Windows XP SP2、MS Visual Studio 2005 (8.0.50727.42)

我的项目有一些外部依赖项(预构建的 DLL——在A上构建或从 Internet 下载)、几个从源代码构建的 DLL 和一个可执行文件。我主要在A上开发,那里一切都很好。在某些时候,我尝试在计算机B上构建我的项目,将预构建的 DLL 复制到输出文件夹。一切都很好,但试图启动我的应用程序我得到了

应用程序未能正确初始化 (0xc0150002)....

事件日志包含其中两个:

无法找到依赖程序集 Microsoft.VC80.CRT 并且上次错误是 引用的程序集未安装在您的系统上。

加上稍微有趣的

为 some.dll 生成激活上下文失败。参考错误信息:操作成功完成。

在这一点上,我正在尝试我的 Google-Fu,但徒劳无功 - 几乎所有点击都是关于在安装 Visual Studio 的机器上运行二进制文件。然而,就我而言,可执行文件无法在它们构建的计算机上运行。

下一步是尝试依赖walker,它让我更加困惑-我从同一个盒子上的源代码构建的DLL无法找到MSVCR80.DLLMSVCP80.DLL但是对于这两个DLL,可执行文件似乎没问题,即当我使用依赖walker打开可执行文件时表明MSVC?80.DLL可以找到 s,但是当我打开我的一个 DLL 时,它说找不到。这就是我完全不知道该怎么做的地方,所以我问你,亲爱的stackoverflow :)

我承认我对整个并排的事情有点模糊,所以对该主题的一般阅读也将受到赞赏。

4

4 回答 4

3

您的问题有您问题的答案:计算机 A 的 VC 运行时版本为8.0.50727.867,而计算机 B 只有版本8.0.50727.42

您在计算机 A 上构建了库,它们依赖于 867 版本的 VC 运行时。(这可以在嵌入库的清单中找到。)当您将它们复制到计算机 B 时,这些库仍然需要运行时版本 867,但您只有版本 42。

要解决 VC 运行时程序集依赖项,您必须在计算机 B 上安装版本 867 的 VC 运行时可再发行组件。但是,我建议您更新计算机 B 上的 Visual Studio,以便在两台计算机上拥有相同的版本。更好的是,在两台计算机上安装 Visual Studio 2005 SP1,然后将这个安全更新安装到 SP1。安装后者后,您的库将依赖于版本8.0.50727.4053

于 2011-03-22T07:22:55.730 回答
1

问题可能与两台机器上安装的不同版本的 CRT 运行时有关。是否可以构建所有模块以使用静态链接的 CRT 运行时来验证这一点?

于 2011-01-02T13:05:00.237 回答
0

首先,我会通过准备虚拟项目来检查预建的 dll 以加载它们

于 2011-01-02T13:10:30.687 回答
0

我最近在一台机器上构建项目然后将它们移动到另一台机器时遇到了相同类型的错误。这里最大的罪魁祸首可能是其中一个二进制组件的调试配置。也就是说,MSVC 有相当严格的要求,即所有 DLL/EXE 都使用相同的运行时库、调试或发布,否则它们将无法一起工作。

当我发生这种情况时,它们也倾向于编译得很好,但是当您尝试运行它们时,您会收到极其神秘的错误消息。

您需要确保您一起构建的每个模块都使用相同的配置,从而通过整个构建链进行调试或发布。此错误也可能与其他库中的不匹配有关,因此请确保您的 MSVC 与您正在构建的机器上的版本完全相同。

于 2011-01-02T17:04:25.040 回答