如何在Windows 7 / visual studio 2008下编译Windows XP

时间:2010-04-05 23:23:29

标签: c++ windows-7 windows-xp cross-platform compilation

我正在运行Windows 7和Visual Studio 2008 Pro并尝试让我的应用程序在Windows XP SP3上运行。

这是一个非常小的命令行程序,所以应该有任何荒谬的依赖:

// XPBuild.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
    printf("Hello world");
    getchar();
    return 0;
}

我在某处读到defining several constants such as WINVER应该允许我为其他平台编译。我已经尝试将以下内容添加到我的/D编译器选项中:

;WINVER=0x0501;_WIN32_WINNT 0x0501;NTDDI_VERSION=NTDDI_WINXP

但这没有任何区别。当我在我的Windows XP机器上运行它(实际上在virtualbox中运行)时,我收到以下错误:

  

此应用程序无法启动,因为应用程序配置不正确。重新安装应用程序可能会解决此问题。

那么我错过了什么?是否还需要运行MSVC编译程序或其他编译器选项或其他东西?

3 个答案:

答案 0 :(得分:10)

你错过的很可能VC ++程序需要安装运行时(除非你静态链接,这不是默认的) - 你显示的错误信息正是你得到的错误信息

尝试在XP计算机上安装Microsoft Visual C++ 2008 SP1 Redistributable Pack - 您很可能会看到您的程序无需任何更改即可正常运行。

答案 1 :(得分:3)

迈克尔的回答解释了为什么它不适合你,以及你应该怎么做。关于WINVER - 它们不会改变你的二进制文件,因为它会突然开始在XP上运行。他们所做的是禁用Windows头文件中的函数和类型声明,这些文件在WINVER指定的操作系统版本上不受支持。这可以确保您不会意外地打电话,例如一些仅限Vista的功能。但是,您并不严格需要它 - 如果您的代码不依赖于任何仅限Vista / 7的功能,您可以在不重新定义WINVER的情况下进行编译,并且它仍然可以正常工作在XP上。

答案 2 :(得分:3)

只需将编译器设置为在项目设置中使用静态链接(项目 - >属性 - >配置属性 - > C / C ++ - >代码生成 - >将“运行时库”更改为/ MT或/ MTd而不是默认/ MD或/ MDd)