Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
32位和64位机器上的C/C++可执行文件_C++_Executable_Cpu Architecture - Fatal编程技术网

32位和64位机器上的C/C++可执行文件

32位和64位机器上的C/C++可执行文件,c++,executable,cpu-architecture,C++,Executable,Cpu Architecture,是否可以使用c/c++制作一个既能在32位机器上运行又能在64位机器上运行的可执行文件?如果是,我如何制作一个?是的,构建一个32位的可执行文件。它可以在64位机器上运行。是的,构建一个32位可执行文件。它可以在64位机器上运行。一般建议是构建32位可执行文件。如果操作系统允许,它可能会在64位机器上运行。Linux、Windows和某些版本的MacOSX上就是这种情况,但您需要进行检查。然而,在Linux上,32位可执行文件通常也使用32位的读取,并且不能从当前可用的大量RAM中获益,因为每个

是否可以使用c/c++制作一个既能在32位机器上运行又能在64位机器上运行的可执行文件?如果是,我如何制作一个?

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

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

一般建议是构建32位可执行文件。如果操作系统允许,它可能会在64位机器上运行。Linux、Windows和某些版本的MacOSX上就是这种情况,但您需要进行检查。然而,在Linux上,32位可执行文件通常也使用32位的读取,并且不能从当前可用的大量RAM中获益,因为每个32位进程将使用不超过4GB的虚拟内存,通常最多3个

有些稀有的已经被接受,但现在已经过时了

您可以以特定于操作系统的方式编写脚本,例如Unix上的脚本,或Windows上的脚本,或检测处理器是否为64位然后运行64位可执行文件的包装器

您可以提供32位和64位的可执行文件变体,并让用户决定运行哪一个

<>你可以考虑在程序中发布一些许可证,把编译的负担留给你的用户。

<>你可以考虑编译你的C++代码,也许是用字节码,并希望你的用户把你的东西放到浏览器中。但这可能并不容易,因为WebAssembly为沙箱目的增加了许多限制,因此在这种情况下,您可能无法使用所有的C++11标准库。

一般建议是构建一个32位的可执行文件。如果操作系统允许,它可能会在64位机器上运行。Linux、Windows和某些版本的MacOSX上就是这种情况,但您需要进行检查。然而,在Linux上,32位可执行文件通常也使用32位的读取,并且不能从当前可用的大量RAM中获益,因为每个32位进程将使用不超过4GB的虚拟内存,通常最多3个

有些稀有的已经被接受,但现在已经过时了

您可以以特定于操作系统的方式编写脚本,例如Unix上的脚本,或Windows上的脚本,或检测处理器是否为64位然后运行64位可执行文件的包装器

您可以提供32位和64位的可执行文件变体,并让用户决定运行哪一个

<>你可以考虑在程序中发布一些许可证,把编译的负担留给你的用户。


<>你可以考虑编译你的C++代码,也许是用字节码,并希望你的用户把你的东西放到浏览器中。但这可能并不容易,因为WebAssembly为沙箱目的增加了许多限制,因此,在这种情况下,您可能无法使用所有的C++11标准库。

32位可执行文件在64位机器上工作,但在windows的情况下,某些win32 api在64位机器上运行32位应用程序时可能无法工作

32位可执行文件在64位机器上工作,但在windows的情况下,某些win32 api在64位机器上运行时可能无法工作在64位机器上运行32位应用程序

您可以将32位和64位放在一个包中

在Linux系统中,如果文件中的第5个字节是1,则它是32位二进制文件。如果是2,则为64位。对于附加的健全性检查:

如果前5个字节是0x7f,ELF,1:它是一个32位的ELF二进制文件。 如果前5个字节是0x7f,ELF,2:它是一个64位的ELF二进制文件。 否则:这是不确定的。 在Windows系统中:

x86 : PE  L
x64 : PE  d†
您还可以确认文件实用程序(例如cygwin)将区分32位和64位可执行文件。其内容如下:

32.exe: PE32 executable (GUI) Intel 80386, for MS Windows
64.exe: PE32+ executable (console) x86-64, for MS Windows
您可以将32位和64位放在一个包中

在Linux系统中,如果文件中的第5个字节是1,则它是32位二进制文件。如果是2,则为64位。对于附加的健全性检查:

如果前5个字节是0x7f,ELF,1:它是一个32位的ELF二进制文件。 如果前5个字节是0x7f,ELF,2:它是一个64位的ELF二进制文件。 否则:这是不确定的。 在Windows系统中:

x86 : PE  L
x64 : PE  d†
您还可以确认文件实用程序(例如cygwin)将区分32位和64位可执行文件。其内容如下:

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

请注意,没有C/C++这样的语言。你要么有C,要么你有C++,它们是两种非常不同的语言。你在哪个平台上定位?Windows,抱歉我忘了在那里写……一些程序员:正确但不相关——这里的相关属性是32位和64位系统之间的共享ABI,这不是C或C++所假设的。@ DunSANANTOL:提到Windows应该进入问题本身。注意,没有任何这样的语言作为C/C++。你要么有C,要么你有C++,它们是两种非常不同的语言。你在哪个平台上定位?Windows,抱歉我忘了在那里写……一些程序员:正确但不真正的勒。
VANT-这里的相关属性是32位和64位系统之间的共享ABI,这不是C或C++所假设的。@ DunSANANTOL:提到Windows应该进入问题本身。它要求操作系统支持32位可执行文件。像32位库或WOW64 Windows。是的,但由于OP没有提供任何关于操作系统或其他要求的信息,我假设他想构建一个Windows应用程序。@Antwane:为什么要这样假设?它要求操作系统支持32位可执行文件。像32位库或WOW64 Windows。是的,但由于OP没有提供任何关于操作系统或其他要求的信息,我假设他想构建一个Windows应用程序。@Antwane:为什么要这样假设?或者只是运行file/path/to/executable,它会识别和解析ELF头。因为我不知道它给OP和w.r.t带来了什么。其他答案。他在评论中说他关心Windows。或者只运行file/path/to/executable,它就会识别并解析ELF头。因为我看不出它给OP和w.r.t.带来了什么其他答案。他在评论中说,他关心Windows。