Visual Studio 2010 - MS C++ (CL) 编译的可执行文件在 Windows 2000 上不起作
visual studio 2010 - MS C++ (CL) compiled executable does not work on Windows 2000
可能的重复项:
在 Windows 2000 中使用C++ DLL 编译的 Visual Studio 2010 时出现问题
类似于这些问题:
我可以将Visual Studio 2010的C++编译器与Visual Studio 2008的C++运行时库一起使用吗?
VS2010可以在Windows 2000下创建本机可执行文件吗?
我有C++代码,我在 WinXP 机器上使用 VS2010(CL 版本 16.00.30319.0)从命令行(使用 CL.EXE)编译,但我希望生成的本机 (x86) 可执行程序在 Win2000、WinXP 等上运行。
旧版本的 CL(VC98,版本 12.00.8186)可以很好地完成这项工作,但 VS2010 版本会生成一个可执行文件,当在 Win2000 上运行时,会导致弹出错误:
foo.exe 不是有效的 Win32 应用程序
解决方案必须采用 CL 编译器或链接器选项的形式,而不是 VisualStudio 设置或属性。我不需要任何较新的C++语言功能,因为代码已有几年的历史,并且编写为可移植到其他操作系统,并且我只想要本机代码(x86,而不是.NET或CLI)可执行文件。
(有关示例,请参阅 http://david.tribble.com/src/crlf.cpp 和 http://david.tribble.com/src/detab.cpp。
我想我可以在我的新开发环境(WinXP,最终是Windows 7)上继续使用较旧的编译器(VS 9.0),但这似乎是一个不太理想的解决方案。当然,MS 仍然提供了一种创建向后兼容较旧但仍然存在的 Windows 操作系统的本机可执行文件的方法吗?
您的错误"foo.exe不是有效的Win32应用程序"可以通过使用editbin将PE标头中的"最低操作系统版本"字段设置为0x0500(Windows 2000)来修复。
EDITBIN /VERSION:5,0 foo.exe
为此,您需要旧版本的editbin或第三方工具,因为新版本会"健全性检查"您提供给它的版本。
在此之后,应用程序将加载,但它可能会开始抱怨 kernel32.dll 中缺少函数。
你链接到的比利问题将带你走得比任何理智的程序员都更深入兔子洞。
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 在Linux上使用Clang / OLLVM交叉编译helloworld Windows可执行文件时的问题
- 编译的C可执行文件被Windows defender检测为病毒
- 测量任何 Windows 可执行文件的内存使用情况和执行时间
- 使用 MINGW 和 CPLEX 库链接从 Linux 编译 Windows 可执行文件
- 如何从 Linux 交叉编译到 32 位 Windows 可执行文件
- 使用 CodeBlocks + GCC 构建的可执行文件是否可以在任何 Windows 上运行?
- 如何在Linux中编译C 程序以生成Windows可执行文件
- C 检索可执行文件的图标,用于Windows注册表图标路径
- 如何从Windows中的可执行文件中推断出文件/目录路径
- 如何从Windows CMD运行可执行文件并将其传递给文件输入的参数参数和重定向
- 如何在 c++ 中调用 unicode 函数 CreateProcessW 来启动 Windows 可执行文件
- 将 Unix 可执行文件转换为 Windows 可执行文件
- >使用 RegCreateKeyEx() 的 Windows 可执行文件不会提示输入 UAC 管理员权限并失败?
- 隐藏或删除不需要的字符串从 Windows 可执行文件版本中
- 通过路径获取 Windows 可执行文件的显示名称
- 如何恢复windows可执行文件的原始入口点
- Clang C++交叉编译器-从Mac OS X生成Windows可执行文件
- Boost-Build:从linux构建windows可执行文件
- 当使用Windows可执行文件作为DLL时,如何初始化C运行时