2014-01-04 1 views
0

У меня есть два компьютера с 64-разрядными процессорами Intel. Один компьютер (А) имеет Ubuntu 10.04 64-битный и второй (В) имеет Ubuntu 11.04 32-разрядные операционные системы, (проверено с помощью команд на этом site)Почему 64-разрядный исполняемый файл, построенный на 64-битной ОС, не запускается на втором 64-битном процессоре с 32-разрядной ОС

Мой по умолчанию компилятор GCC на обе машины. Из того, что я знаю, во время компиляции gcc обнаруживает, какой тип ОС (32 бит/64 бит) компилируется и, соответственно, делает 32-разрядный или 64-разрядный исполняемый файл.

Теперь я написал простую Всемирную программу Hello в C++ на А, а затем пытался выполнить его на B.

сообщение, которое я получил, был

zsh: exec format error: ./hello

Почему это так? Будучи 64-битным процессором, он должен выполнять 64-битный исполняемый файл независимо от того, какой тип операционной системы имеет .

Однако исполняемый файл hello world, построенный на B, запускается на A. Это ожидается, поскольку 64-разрядные CPU должны запускать 32-разрядный исполняемый файл.

Есть ли какая-то концептуальная ошибка, которую я здесь делаю?

+0

А? Если вы создали 64-битную программу, она не будет работать на 32-битной ОС, даже если процессор, если 64 бит? и процессор, и ОС должны быть 64 бит? –

ответ

2

Задача операционной системы - запустить программу, а 32-разрядная ОС не распознает исполняемый файл на 64 бита. Также программа вызовет некоторые системные библиотеки и будет искать 64-битные библиотеки. Но в этом случае это 64-битный (ELF?) Двоичный файл, а 32-битное ядро ​​не имеет понятия, что с ним делать.

Возможно 32-разрядная ОС, которая может запускать 64-разрядные программы. Они не.

 Смежные вопросы

  • Нет связанных вопросов^_^