我使用Visual Studio 11 Developer Preview编译我的C++源代码。我静态链接运行库。
生成的可执行文件无法在Windows XP上执行。当我尝试在Windows XP上执行它时,我会收到错误消息“[可执行文件路径]不是有效的Win32应用程序。”
根据微软的说法, Visual Studio 11不支持Windows XP。
为什么生成的可执行文件不能在Windows XP上执行?可执行文件中是否有特殊内容?
我使用Visual Studio 11 Developer Preview编译我的C++源代码。我静态链接运行库。
生成的可执行文件无法在Windows XP上执行。当我尝试在Windows XP上执行它时,我会收到错误消息“[可执行文件路径]不是有效的Win32应用程序。”
根据微软的说法, Visual Studio 11不支持Windows XP。
为什么生成的可执行文件不能在Windows XP上执行?可执行文件中是否有特殊内容?
如果您想继续使用VS11,则另一种选择是使用多目标和旧编译器...
Visual Studio 2012现在可以在2012年晚些时候将目标定在Windows XP:
使用Visual Studio 2012中的C++来定位Windows XP
“今年秋季晚些时候,微软将会提供一个更新版本的Visual Studio 2012,使得C ++应用程序可以将目标定在Windows XP上。这个更新将对Visual C ++ 2012编译器,运行时和库进行必要的修改,以便开发人员能够创建可在Windows XP及更高版本(包括Windows Server 2003及更高版本)上运行的应用程序和DLL。”
编辑:此事已经实现(哇!)
平台工具集
,这将链接不同版本的 CRT 并生成与早期操作系统兼容的二进制文件。v90
工具集,您的二进制文件将能够运行在早期的系统中,如 Windows 2000。
http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-69/7444.BlogPic.png
随着VS 2010及更高版本捆绑的运行时库,强制您的可执行文件从kernel32.dll导入两个新函数:EncodePointer和DecodePointer。这些函数是为了另一种天真的尝试增强软件“安全性”而需要的,但在Windows XP上缺失。
在VS 2010中,有一个选项可以使用Visual Studio 2008的运行时库,从而解决了这个问题。我不知道在后续版本的VS中是否有这样的选项。
3000 .data 3000 .rdata 2000 .reloc 1000 .rsrc 6000 .text
- Norbert Willhelm