c++ - MS C++ (CL) 编译的可执行文件不能在 Windows 2000 上运行

标签 c++ visual-studio-2010 compiler-options

<分区>

Possible Duplicate:
Issue using Visual Studio 2010 compiled C++ DLL in Windows 2000

类似这些问题:
Can I use Visual Studio 2010's C++ compiler with Visual Studio 2008's C++ Runtime Library?
Can VS2010 create native executable file working under Windows 2000?


我有在 WinXP 机器上使用 VS2010 (CL 版本 16.00.30319.0) 从命令行(使用 CL.EXE)编译的 C++ 代码,但我希望生成的 native (x86) 可执行程序能够在 Win2000、WinXP 等平台上运行。

旧版本的 CL(VC98,版本 12.00.8186)可以很好地完成工作,但 VS2010 版本生成的可执行文件在 Win2000 上运行时会导致弹出错误:

foo.exe is not a valid Win32 application

解的形式必须是CL compilerlinker options ,而不是 VisualStudio 设置或属性。我不需要任何较新的 C++ 语言功能,因为代码是几年前的,并且编写为可移植到其他操作系统,我只需要 native 代码(x86,而不是 .NET 或 CLI)可执行文件。

(有关示例,请参见 http://david.tribble.com/src/crlf.cpphttp://david.tribble.com/src/detab.cpp。)

我想我可以在我的新开发环境(WinXP,最终是 Windows 7)上继续使用旧的编译器 (VS 9.0),但这似乎不是一个理想的解决方案。 MS 肯定仍然提供了一种创建 native 可执行文件的方法,这些可执行文件向后兼容旧的但仍然存在的 Windows 操作系统?

最佳答案

您的错误“foo.exe 不是有效的 Win32 应用程序”可以通过使用 editbin 将 PE header 中的“最低操作系统版本”字段设置为 0x0500 (Windows 2000) 来修复。

EDITBIN /VERSION:5,0 foo.exe

为此,您需要一个旧版本的 editbin 或第三方工具,因为新版本会“完整性检查”您提供的版本。

在此之后,应用程序将加载,但它可能会开始提示 kernel32.dll 中缺少函数。

你链接到的 Billy's question 将把你带到比任何理智的程序员都想去的更远的兔子洞。

关于c++ - MS C++ (CL) 编译的可执行文件不能在 Windows 2000 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6089448/

相关文章:

c++ - [C++] 将一个字符串分割成由另一个字符串中给出的符号以外的任何分隔符分隔的字符串?

c++ - clang compaining about __attribute__((packed)) 即使结构需要打包

c# - 预烘焙 MS 代码的 Visual Studio 2010 项目设置

c# - 表单上所有控件的一个事件处理程序

使用和不使用 -std=c99 的代码会产生不同的结果(UMAC AE 实现)

c - 将 GCC 选项添加到 C 源文件的顶部

c++ - 从 C++ 调用 Web 服务

C++:obj 文件的链接顺序重要吗?

c# - 在 visual studio 2010 中自动生成捕获

c++ - MIXED_STR_LEN_ARG 与 gfortran