【问题标题】:How do I compile for windows XP under windows 7 / visual studio 2008如何在 windows 7/visual studio 2008 下为 windows XP 编译
【发布时间】:2023-03-17 15:32:01
【问题描述】:

我正在运行 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++ 中是可选的。

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


【解决方案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 可以解决问题。
    猜你喜欢
    • 2011-03-04
    • 2021-12-04
    • 2012-10-19
    • 2020-02-13
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多