【发布时间】:2014-01-22 10:35:47
【问题描述】:
我有两台计算机都配备 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 位可执行文件。
我在这里犯了一些概念上的错误吗?
【问题讨论】:
-
嗯?如果您构建了一个 64 位程序,即使处理器是 64 位,它也不会在 32 位操作系统上运行?处理器和操作系统都需要 64 位?
标签: x86 executable 32bit-64bit processor