【问题标题】:C++ program works on XP SP2 only after installing Visual Studio只有在安装 Visual Studio 后,C++ 程序才能在 XP SP2 上运行
【发布时间】:2012-04-09 22:45:58
【问题描述】:

我有一个 C++ 程序。这很简单 - 显示图像(启动屏幕)并启动另一个应用程序,然后在启动另一个应用程序时关闭。实际上,这个:http://www.olsonsoft.com/blogs/stefanolson/post/A-better-WPF-splash-screen.aspx 有非常小的变化(我的初始屏幕图像和我的程序已启动,而不是示例之一)。

它在我的 Windows 7 开发者机器上运行良好。它还可以在安装了 Windows XP SP2 和 Visual Studio 2008 的另一台(虚拟)机器上运行。但它不能在没有 Visual Studio 的同一台虚拟 Windows XP SP2 机器上工作。显示错误:“Entry point memmove_s could not be located in the dynamic link library msvcrt.dll”。

我发现 WindowsCodec DLL 可能存在问题(在明确的 XP SP2 安装中没有这样的 DLL,但它在带有 Visual Studio 的 XP SP2 的 Windows/system32 文件夹中)所以我将它复制到了应用程序文件夹中系统。之后程序部分工作(启动后启动另一个应用程序),但没有显示初始屏幕图像。

安装 Microsoft Visual C++ Redistributable Package(2008 和 2010)没有帮助。

我找到了在 Visual Studio 中使用静态链接的建议(Multi Threaded (/MT) 项目属性中的选项 -> C/C++ -> 代码生成),但它也没有帮不上忙。

我也尝试过 DependencyWalker,但在两个测试系统的依赖项中找不到任何差异。

有人知道为什么会发生这种情况吗?我是 C++ 的新手,希望这是我不知道的显而易见的事情......

【问题讨论】:

  • 在您的可执行文件上运行 depends 并找出它为什么需要该 DLL。
  • 也许使用像 Qt 这样的跨平台工具包可能是值得的......
  • 你是说 DependencyWalker 吗?我已经尝试过了,但不明白为什么它可以在带有 Visual Studio 的系统上工作,但没有它就不能工作。依赖项看起来完全一样,缺少依赖项和缺少函数的依赖项。
  • @BasileStarynkevitch 不幸的是,我没有 C++ 经验,因此我无法重写程序。希望它只需要一些配置...
  • @BasileStarynkevitch:即使您使用跨平台工具包,您的程序仍将依赖于特定于平台的组件。用msvc编译Qt,你的程序会依赖VC redist x86,不安装就无法运行。

标签: c++ visual-studio winapi windows-xp


【解决方案1】:

您的程序依赖于 .NET 框架,至少是 3.0 版。默认情况下,这在 XP SP2 安装中不可用。如果您没有看到 windowscodecs.dll,那么您没有安装正确版本的 .NET。这在您安装 VS2008 时确实有效,因为它还安装了 .NET。

下载is here

【讨论】:

  • 没错!已安装 .NET Framework 3.5,现在显示启动画面。问题是我的应用程序面向 .NET 2.0(现在在客户端计算机上似乎更通用了)......但如果理解正确,不重写程序或安装框架就什么都做不了。
【解决方案2】:

C++ 程序依赖于编译它的 crt 库的特定版本。如果正在运行的系统在本地程序目录或系统 WinSxS 目录中没有该版本。这是使用 VS 2005 或 2008 编译的 C++ 程序的特定问题。有关更多信息,请参见此处:http://en.wikipedia.org/wiki/Side-by-side_assembly

如果您使用 VS 2010,您可能会发现这个问题消失了,因为它使用不同的方法来解决依赖关系。

【讨论】:

  • 其实既然问题是引用WPF,那很明显就是.NET了。您的答案通常是正确的,尽管这里的运行时不是 C 运行时。 +1
  • 他的具体错误提到了作为 CRT 一部分的 dll。无论您的框架是什么,如果您使用任何 C 库,那么您就是在使用 CRT。
  • 他正在使用托管 C++,这将使此基于 .NET。但是不要担心我的投票是当之无愧的,因为您的答案包含要点(以及更多):)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 2010-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多