为什么在64位操作系统上构建的64位可执行文件不能在具有32位操作系统的第二个64位CPU上运行

时间:2014-01-04 19:56:19

标签: x86 executable 32bit-64bit processor

我有两台配备64位Intel处理器的计算机。一台计算机(A)具有 Ubuntu 10.04 64位 第二个(B)有 Ubuntu 11.04 32位操作系统,(使用此site上的命令验证)

我的默认编译器是两台机器上的gcc。据我所知,在编译期间,gcc会检测它编译的操作系统类型(32位/ 64位),从而生成32位或64位可执行文件。

现在我在A上用C ++编写了一个简单的Hello World程序,然后尝试在B上执行它。

我收到的消息是

zsh: exec format error: ./hello

为什么会这样?作为64位CPU,它应该执行64位可执行程序,无论如何 操作系统类型是什么。

然而,基于B的hello world可执行文件在A上运行。这是预期的,因为64位CPU 应该运行32位可执行文件。

我在这里有一些概念上的错误吗?

1 个答案:

答案 0 :(得分:2)

运行程序是操作系统的工作,32位操作系统无法识别64位可执行文件。该程序还将调用一些系统库并寻找64位库。但在这种情况下,它是一个64位(ELF?)二进制文件,32位内核将不知道如何处理它。

可以编写一个可以运行64位程序的32位操作系统。他们不是。