C/C++ 在 32 位和 64 位机器上可执行
C/C++ executable on 32-bit and 64-bit machines
是否可以使用 c/c++ 制作一个 executable
可以在 32-bit
和 [ 上 运行 =13=]机器?如果可以,我该如何制作?
是的,构建一个 32 位可执行文件。它可以 运行 在 64 位机器上。
一般性建议(如 ) is to build a 32 bits executable. It probably would run on a 64 bits machine, if the operating system allows that. This is the case on Linux, Windows and some versions of MacOSX (but you need to check). However, 32 bits executables generally use a 32 bits virtual address space (read also about x32 对 Linux 的建议)并且无法利用当今可用的大量 RAM(因为每个 32 位进程将使用不超过 4 GB 的虚拟内存,并且一般最多3).
有些稀有 operating systems accepted fat binaries,但它们在今天已经过时了。
您可能会以某种特定于操作系统的方式编写脚本(例如 Windows 上的 shell script on Unix, or a PowerShell 脚本)或检测处理器是否为 64 位然后 [=29] 的包装器=] 64 位可执行文件。
您可以发布可执行文件的 32 位和 64 位变体(并让您的用户决定发送哪一个 运行)。
您可以考虑发布(例如,在 github) the source code of your program with some open source 许可上并将编译的负担留给您的用户。
您可能会考虑编译您的 C++ 代码(可能使用 Emscripten) to WebAssembly 字节代码并期望您的用户 运行 您的东西进入他的浏览器。但这可能并不容易(因为 WebAssembly 增加了许多限制出于沙盒目的,所以在这种情况下您可能无法使用所有 C++11 标准库)。
32 位可执行文件在 64 位机器上工作,但在 windows 某些 win32 api 的情况下可能无法工作,而 运行 32 位应用程序在 64 位机器上
您可以将 32
和 64
钻头放在一个包中。
在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-bit
和 64-bit
可执行文件。它们显示如下:
32.exe: PE32 executable (GUI) Intel 80386, for MS Windows
64.exe: PE32+ executable (console) x86-64, for MS Windows
是否可以使用 c/c++ 制作一个 executable
可以在 32-bit
和 [ 上 运行 =13=]机器?如果可以,我该如何制作?
是的,构建一个 32 位可执行文件。它可以 运行 在 64 位机器上。
一般性建议(如
有些稀有 operating systems accepted fat binaries,但它们在今天已经过时了。
您可能会以某种特定于操作系统的方式编写脚本(例如 Windows 上的 shell script on Unix, or a PowerShell 脚本)或检测处理器是否为 64 位然后 [=29] 的包装器=] 64 位可执行文件。
您可以发布可执行文件的 32 位和 64 位变体(并让您的用户决定发送哪一个 运行)。
您可以考虑发布(例如,在 github) the source code of your program with some open source 许可上并将编译的负担留给您的用户。
您可能会考虑编译您的 C++ 代码(可能使用 Emscripten) to WebAssembly 字节代码并期望您的用户 运行 您的东西进入他的浏览器。但这可能并不容易(因为 WebAssembly 增加了许多限制出于沙盒目的,所以在这种情况下您可能无法使用所有 C++11 标准库)。
32 位可执行文件在 64 位机器上工作,但在 windows 某些 win32 api 的情况下可能无法工作,而 运行 32 位应用程序在 64 位机器上
您可以将 32
和 64
钻头放在一个包中。
在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-bit
和 64-bit
可执行文件。它们显示如下:
32.exe: PE32 executable (GUI) Intel 80386, for MS Windows
64.exe: PE32+ executable (console) x86-64, for MS Windows