我使用Visual Studio 11 Developer Preview编译我的C ++源代码。我静态链接到运行时库。
生成的可执行文件无法在Windows XP上执行。当我尝试在Windows XP上执行它时,我收到错误消息“[可执行路径]不是有效的Win32应用程序。”。
According to Microsoft Visual Studio 11不支持Windows XP。
如何在Windows XP上执行生成的可执行文件?可执行文件中有什么特别的东西吗?
答案 0 :(得分:21)
他们似乎放弃了对VS的每个新版本(NT4,2000,XP)中旧系统的支持。即使您根本不使用CRT,它们仍会强制PE子系统版本为高数字。您可以在后期构建步骤中通过changing the numbers back到5.0来解决这个问题。只是更改这些数字应该允许exe在XP上启动,除非新的CRT使用的是XP上不存在的WinAPI函数。
如果您想继续使用VS11,另一种选择是使用多目标和较旧的编译器......
答案 1 :(得分:8)
Visual Studio 2012将能够在2012年晚些时候以Windows XP为目标:
Targeting Windows XP with C++ in Visual Studio 2012
“今年秋天晚些时候,微软将提供Visual Studio 2012的更新,使C ++应用程序能够以Windows XP为目标。此更新将对Visual C ++ 2012编译器,运行时和库进行必要的修改以启用开发人员创建在Windows XP及更高版本以及Windows Server 2003及更高版本上运行的应用程序和DLL。“
修改:现在已经发生了(p!)
答案 2 :(得分:4)
解决方法是使用不同的Platform Toolset
,它将链接不同版本的CRT并生成与旧操作系统兼容的二进制文件。
在此处查看更多内容:Target Windows XP in Visual Studio 11 Beta using the Visual Studio 2010 compiler and libraries。
使用v90
工具集,您的二进制文件即使在较旧的系统中也能运行,例如Windows 2000。
答案 3 :(得分:1)
与VS 2010及更高版本捆绑在一起的运行时库强制执行可执行文件,以从Windows XP中缺少的kernel32.dll导入两个新功能:EncodePointer
和DecodePointer
。这些是另一个 idiotic 天真的尝试,以增强软件“安全性”。
在VS 2010中,可以选择使用Visual Studio 2008的运行时库来解决此问题。我不知道在VS的后期版本中是否有这样的选项。