MS C ++(CL)编译的可执行文件在Windows 2000上不起作用

时间:2011-05-22 17:05:57

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

  

可能重复:
  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)从命令行编译C ++代码(使用 CL.EXE ),但我希望生成的本机(x86)可执行程序在Win2000,WinXP等上运行。

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

  

foo.exe 不是有效的Win32应用程序

解决方案必须采用CL compilerlinker options的形式,而不是VisualStudio设置或属性。我不需要任何较新的C ++语言功能,因为代码已经存在了几年,并且可以移植到其他操作系统,我只需要本机代码(x86,而不是.NET或CLI)可执行文件。

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

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

1 个答案:

答案 0 :(得分:2)

您的错误“foo.exe不是有效的Win32应用程序”可以通过使用editbin将PE标头中的“Minimum OS version”字段设置为0x0500(Windows 2000)来修复。

EDITBIN /VERSION:5,0 foo.exe

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

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

Billy提出的问题会让你在兔子洞的距离比任何理智的程序员想要的更远。