在32位和64位计算机上可执行C / C ++

时间:2018-05-15 11:52:55

标签: c++ executable cpu-architecture

是否可以使用可在executable32-bit计算机上运行的 c / c ++ 进行64-bit?如果是这样,我该怎么做?

4 个答案:

答案 0 :(得分:5)

是的,构建一个32位可执行文件。它可以在64位机器上运行。

答案 1 :(得分:4)

一般建议(如answered by Antwane)是构建一个32位可执行文件。如果操作系统允许,它可能会在64位机器上运行。在Linux,Windows和某些版本的MacOSX上就是这种情况(但您需要检查)。但是,32位可执行文件通常使用32位virtual address space(在Linux上也读取x32)并且无法从当前可用的RAM中获利(因为每个32位进程使用不超过4千兆字节)虚拟内存,通常最多3)。

一些罕见的operating systems接受fat binaries,但它们今天已经不合时宜了。

您可以用某种操作系统特定的方式编写脚本(例如Unix上的shell script或Windows上的PowerShell脚本)或检测处理器是否为64位的包装器。然后运行64位可执行文件。

您可以发送可执行文件的32位和64位变体(并让您的用户决定它将运行哪个)。

您可以考虑使用某些github许可证发布(例如在source code)您的计划的open source,并将编译负担留给您的用户。

您可能会考虑编译C ++代码(可能使用Emscripten)到WebAssembly字节代码,并希望您的用户将您的东西运行到他的浏览器中。但这可能不会轻易起作用(因为WebAssembly会为沙盒添加许多限制,因此在这种情况下您可能无法使用所有C ++ 11标准库。)

答案 2 :(得分:2)

64位计算机中的32位可执行文件工作但是在Windows的情况下,在64位计算机上运行32位应用程序时,某些win32 api可能无法正常工作

答案 3 :(得分:1)

您可以将3264位放在一个包中。

Linux 系统中的

如果文件中的5th字节是1,则它是32-bit二进制文件。如果它是2,它是64-bit。为了增加健全性检查:

  • 如果前5个字节是0x7f,"ELF"1:它是32位ELF二进制文件。
  • 如果前5个字节是0x7f,"ELF"2:它是64位ELF二进制文件。
  • 否则:它没有结果。
Windows 系统中的

x86 : PE  L
x64 : PE  d†

此外,您可以确认文件实用程序(例如来自cygwin)将区分32-bit64-bit可执行文件。它们如下所示:

32.exe: PE32 executable (GUI) Intel 80386, for MS Windows
64.exe: PE32+ executable (console) x86-64, for MS Windows