如何在 windows 7/visual studio 2008 下为 windows XP 编译
Posted
技术标签:
【中文标题】如何在 windows 7/visual studio 2008 下为 windows XP 编译【英文标题】:How do I compile for windows XP under windows 7 / visual studio 2008 【发布时间】:2011-02-04 14:55:43 【问题描述】:我正在运行 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 编译程序或不同的编译器选项或其他东西是否需要其他东西?
【问题讨论】:
不管怎样,最小的标准应用程序是int main()
,如果你想试试的话。对于使用标准库的东西,可能是:#include <iostream> int main()std::cout << std::endl;
是的,但我想要一些能吐出一些输出并在消失前暂停的东西。
不管怎样,最小的标准应用是 int main()return 0;
@gregschlom:return 0;
在 C99 和 C++ 中是可选的。
【参考方案1】:
只需在项目设置中将编译器设置为使用静态链接(项目 -> 属性 -> 配置属性 -> C/C++ -> 代码生成 -> 将“运行时库”更改为 /MT 或 /MTd 而不是默认值/MD 或 /MDd)
【讨论】:
非常适合我!【参考方案2】:Michael 的回答解释了为什么它对您不起作用,以及您应该怎么做。关于WINVER
- 从某种意义上说,它们不会改变您的二进制文件的任何内容,因为它会突然开始在 XP 上运行。他们所做的是禁用WINVER
指定的操作系统版本不支持的 Windows 头文件中的函数和类型声明。这样可以确保您不会意外调用,例如一些仅适用于 Vista 的功能。但是,您并不严格需要它 - 如果您的代码不依赖于任何仅 Vista/7 的功能,您可以在不重新定义 WINVER
的情况下进行编译,它仍然可以在 XP 上正常工作.
【讨论】:
【参考方案3】:您错过的很可能是 VC++ 程序需要安装运行时(除非您静态链接,这不是默认设置) - 您显示的错误消息正是您得到的错误消息,如果它们不按顺序.
尝试在 XP 机器上安装 Microsoft Visual C++ 2008 SP1 Redistributable Pack - 您很可能会发现您的程序无需任何更改即可运行。
【讨论】:
另外,更改为静态链接运行时的选项可能效果很好。 或者,使用静态运行时库进行编译:转到“项目属性 -> C/C++ -> 代码生成 -> 运行时库”,然后选择名称中不带“DLL”的选项。 是的,安装 Visual Studio SP1 可以解决问题。以上是关于如何在 windows 7/visual studio 2008 下为 windows XP 编译的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows 上构建/调试(完整)LibTorch 源?
如何在 Win 7 Visual Studio 2012 的 C# 中禁用#if DEBUG
如何使用会话ID从php mysql中的两个或多个表中获取值
If(fwrite(&stud[i],sizeof(struct student_type),1,fp)!=1) 是啥意思?