2009-10-05 232 views
2

我对这个东西不太了解。奇怪的编译(?)probem。 Visual Studio C++ 2008

有一个应用程序,我使用XP上网本调整汽车。它工作得很好。然后我需要做一个简单的修改(输出到STDOUT而不是文件),所以我从作者那里得到了源代码。

我的上网本没有编译器的空间。我在Windows 7桌面上安装了Visual Studio C++ 2008。我做了调整,在桌面上进行了编译和测试,并且工作起来很完美。于是我复制了可执行的上网本,它不会跑

“此应用程序未能启动 因为应用程序配置 不正确。重新安装 应用程序可能会解决这个问题”。

原始(预编译)exe工作正常。为了排除我的改变,我编译了没有mod的源代码,但它仍然无法工作。可执行文件在7台机器以及另一台我试过的Win Vista机器上运行良好。

所以它显然与XP机器和可执行文件的编译方式有关。我真的不知道这些东西是如何工作的,所以我不知道该怎么尝试。

任何想法?谢谢

回答

4

它是因为编译到您的应用程序中的依赖项/ DLL在您运行的平台上不存在。

打开窗口事件查看器并查看应用程序日志。将会有一个错误条目和缺少的DLL名称。在目标平台上复制/安装该DLL。

我想你的vc运行时已经改变了visual studio 2008,你需要将最新版本复制到你的目标平台上。如果你不知道在哪里得到依赖DLL,在这里发布这个名字,我们可以看到我们可以做些什么。

+0

你是完全正确的。我不认为它是一个缺少的DLL,因为当我遇到过去时,它总是更加明确:“XXX.DLL丢失”或“需要的DLL丢失”等。 – Steven 2009-10-05 07:23:07

6

几个想法:

正如Keith所说,上面这是DLL/manifest问题。

  1. 获取Visual Studio 2008可再发行组件(用于匹配应用程序平台)并将其安装在上网本上。

  2. 如果这没有帮助:使用Dependency Walker找出你缺少的其他DLL。

+0

谢谢。依赖Walker给了我一些暗示它与MFC有关。 – Steven 2009-10-05 07:22:06

2

您可以检查您的项目设置,并确保使用静态链接的运行时而不是DLL。

项目设置,C/C++ - >代码生成。确保您使用的不是DLL的运行时库。 (如多线程调试,而不是多线程调试DLL)。

+0

谢谢。那做了瑞克。好吧,几乎...我无法选择你的建议,因为它然后抱怨AFX不得不使用DLL。但后来我看到了另一个选项,使MFC成为一个静态链接库而不是DLL,并且做到了! – Steven 2009-10-05 07:21:29