VC ++ 2008中的C ++ EXE在Windows 7上运行,但不在XP上运行

时间:2009-11-01 02:22:45

标签: php c visual-c++ windows-xp

我正在努力恢复旧项目(仅适用于< 5.1),它基本上将PHP 5.3编译为PE C ++ EXE。在多台Windows 7计算机上,对于大多数应用程序只有2个dll和1个exe,我已经完全真的了!不幸的是,在XP上我得到了:

  

应用程序无法启动,因为应用程序配置不正确

我安装了Microsoft Visual C ++ 2008 Redistributable Package无济于事。我还将msvcm90.dll,msvcr90.dll,msvcp90.dll复制到与exe相同的目录中。这也行不通。

我是否只需要在XP上编译项目以使其在XP上运行?

我非常擅长PHP,但C不是我的强项,所以我认为我遗漏了编译器中显而易见的东西。

编辑: 当我使用多线程(/ Mt)进行编译时,我得到了这个:

MSVCRT.lib(MSVCR90.dll) : error LNK2005: _fflush already defined in 
LIBCMT.lib(fflush.obj)
MSVCRT.lib(MSVCR90.dll) : error LNK2005: _malloc already defined in LIBCMT.lib(malloc.obj)
MSVCRT.lib(MSVCR90.dll) : error LNK2005: _free already defined in LIBCMT.lib(free.obj)
LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
out/console_debug.exe : fatal error LNK1169: one or more multiply defined symbols found

4 个答案:

答案 0 :(得分:3)

尝试在XP上使用Dependency Walker,看看是否可以找到任何遗漏的依赖项。

同时检查事件查看器。并确保您在发布模式下构建应用程序。


依赖于DWMAPI.DLL的Dependency Walker通常是一个不正确的报告,这可能是因为在使用IE7的XP机器上依赖mshtml.dll。你检查了事件查看器吗?

您发布的构建错误表明您正在链接到未使用/ MT标志构建的库。确保重建解决方案中的所有内容;您的2个DLL,.EXE和具有相同标志的任何静态库,假设您也拥有DLL。

答案 1 :(得分:2)

您的应用程序目录中是否有清单文件?我建议确保它们在那里并正确引用DLL位置。看一下这个参考:

http://msdn.microsoft.com/en-us/library/ms235342(VS.80).aspx

答案 2 :(得分:1)

您是否尝试过项目/属性/配置属性/ C / C ++ /代码生成/运行时库 - >多线程(/ MT)?

答案 3 :(得分:0)

尝试在XP计算机上安装VC2008可再发行组件。