MS Visual Studio Professional 2013 – C ++为32位和64位操作系统编译单个可执行文件?

Google给了我一个线索, 可以将代码编译成一个可执行文件, 在32位操作系统上以32位运行 ,在64位操作系统上以64位运行 。 可执行文件真的有可能在运行时确定它的位数?

在我的情况下,目标系统将是Windows 7 Professional x64Windows XP SP3 x86

所以我在各种文章上阅读的内容(我认为甚至还有Soltuion SO的答案),就是必须到SoltuionConfiguration ManagerRMB到解决scheme – > configurationpipe理器 ),并将Platform设置为任何CPU

现在,所有这些文章都介绍了旧版MSVS或MSVC ++版本的设置,但是我认为在2013版RC(我刚刚安装)中没有对Configuration Manager进行重大更改。

Active Solution下拉列表中,我没有selectAny CPU ,所以我遵循这个配方 ,我发现。 在我的情况下,这个小小的指南失败了,我仍然没有selectAny CPU时,按照第5步:

  • 5)确保在新平台下select“任何CPU”。 如果在步骤3中没有任何CPU解决scheme平台,请确保选中“新build解决scheme平台”checkbox。 然后单击确定。

可用的下拉列表项是x64ARMWin32也是默认添加的),我不能selectAny CPU

添加目标平台x64并编译可执行文件运行良好,程序在Windows 7 x64上运行为64位,但是无法在32位Windows XP机器上运行。

如何将目标平台设置为Microsoft Visual Studio Professional 2013 RC中的 Any CPU

不,这绝对不是。 您需要定义单独的可执行文件。

“任何CPU”下拉列表允许您为多个平台设置编译器设置(例如,用于x64和Win32的_DEBUG处理器)您不能实际构建到该目标。

AnyCPU是指.Net程序,而不是C ++。 C ++必须编译为本地,x86或x64。 你可以建立64位程序并将其捆绑到你的32程序中,在运行时解压。 ProcessExplorer使用此技术。

也许不是一个真正的答案,但是对于大多数情况来说,在64位系统上运行32位代码工作得非常好。 当然,它可能会运行得慢一些,但是相比于不得不处理(并彻底测试)两个不同的二进制文件,除非在64位模式下(或者您的应用程序使用大于2GB左右的内存空间)具有显着的性能优势,我很想用32位模式。

MacOS支持所谓的“胖二进制文件”,其中程序编译两次,两个版本都打包成一个文件。 操作系统决定实际启动哪个版本。

Windows没有这样的东西。

您可以编译.NET包装(任何CPU)和程序的其余部分作为yourprogram86.dll和yourprogram64.dll

 [DllImport("yourprogram32.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "open")] public static extern void open32(); [DllImport("yourprogram64.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "open")] public static extern void open64(); static bool Is64() { //.Net 4.0 //Environment.Is64BitOperatingSystem //.Net 2.0 return IntPtr.Size == 8; } static void open() { if (Is64()) open64(); else open32(); }