代码之家  ›  专栏  ›  技术社区  ›  Alec Gorge

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

  •  2
  • Alec Gorge  · 技术社区  · 15 年前

    我正在努力恢复一个旧的项目(它只与lt;5.1)基本上把PHP 5.3编译成一个PE C++ exe。我已经把所有的事情都做好了 真的? 在多台Windows7计算机上,大多数应用程序只有2个DLL和1个EXE!不幸的是,在xp上我得到:

    应用程序启动失败,因为应用程序配置不正确

    我已经安装了微软Visual C++ 2008可重分发软件包,但没有用。我还将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 回复  |  直到 14 年前
        1
  •  3
  •   Gerald    15 年前

    试用使用 Dependency Walker 在xp上查看是否可以找到任何缺少的依赖项。

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


    显示对dwmapi.dll依赖关系的依赖关系查询器通常是错误的报告,这可能是由于在带有IE7的xp框上依赖mshtml.dll造成的。是否检查了事件查看器?

    您发布的生成错误表明您链接到的库不是用/mt标志生成的。确保重新生成解决方案中的所有内容;2个DLL、.exe和具有相同标志的任何静态库,前提是您也拥有这些DLL。

        2
  •  2
  •   Fabio Ceconello    15 年前

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

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

        3
  •  1
  •   henle    15 年前

    您尝试过Projt/Projices /属性/配置属性/C/C++ +代码生成/运行库-gt;多线程(/MT)吗?

        4
  •  0
  •   valdo    14 年前

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