【问题标题】:Why does a 64-bit executable built on 64 bit OS not run on a second 64-bit CPU having a 32-bit OS为什么在 64 位操作系统上构建的 64 位可执行文件不能在具有 32 位操作系统的第二个 64 位 CPU 上运行
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2012-07-26
    • 1970-01-01
    • 2011-06-01
    • 2011-12-18
    • 1970-01-01
    • 2010-10-05
    • 2011-07-07
    • 2013-08-29
    • 2012-11-17
    相关资源
    最近更新 更多