我有两台配备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位可执行文件。
我在这里有一些概念上的错误吗?
答案 0 :(得分:2)
运行程序是操作系统的工作,32位操作系统无法识别64位可执行文件。该程序还将调用一些系统库并寻找64位库。但在这种情况下,它是一个64位(ELF?)二进制文件,32位内核将不知道如何处理它。
可以编写一个可以运行64位程序的32位操作系统。他们不是。