这是我的配置:

  • 计算机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-要么建立在 一个 或从Internet下载),其中几个由源构建的DLL和一个可执行文件。我主要是在发展 一个 那里一切都很好。在某个时候,我尝试在计算机上构建我的项目 b, ,将预构建的DLL复制到输出文件夹。一切都很好,但是试图启动我的应用程序我得到

该应用程序无法正确初始化(0xc0150002)。

事件日志包含其中两个:

依赖的组件Microsoft.vc80.crt找不到,最后错误是您的系统未安装引用的组件。

加上稍微有趣的

生成激活上下文失败了。参考错误消息:操作成功完成。

在这一点 没有 Visual Studio已安装。但是,就我而言,可执行文件无法在它们构建的计算机上运行。

下一步是尝试依赖性沃克,这使我感到困惑 - 我的DLL是从同一盒子上的来源构建的 MSVCR80.DLLMSVCP80.DLL, 但是,对于这两个dll,当我用依赖性沃克(Depertency Walker)打开可执行文件时,可执行文件似乎还不错。 MSVC?80.DLL可以找到s,但是当我打开一个dll时,它说他们不能。那是我完全没有想法的地方,我问你,亲爱的stackoverflow :)

我承认我在整个并排的事情上有点模糊,因此对该主题的一般阅读也将不胜感激。

有帮助吗?

解决方案

您的问题具有解决问题的答案:计算机A具有版本的VC运行时 8.0.50727.867, ,计算机B只有版本 8.0.50727.42.

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

为了解决VC运行时组件依赖项,您必须在计算机B上安装版本867的VC Runtime Redistibutables。但是,我建议您在计算机B上更新Visual Studio,以便在两台计算机上都具有相同的版本。更好的是,在两台计算机上安装Visual Studio 2005 SP1,然后安装 此安全性更新到SP1. 。安装后者后,您的库将取决于版本 8.0.50727.4053.

其他提示

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

首先,我会通过准备虚拟项目来加载这些dll的dll

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top