Почему исполняемая программа для конкретного процессора не работает в Linux и Windows?

По-прежнему возникают проблемы и в Chrome? Для тех, у кого еще есть проблемы (например, я), проверьте, что у вас есть <!DOCTYPE html> в начале вашего документа. Если вам не кажется, что Chrome полностью игнорирует все, что вы добавляете, и сохраняйте display: table-cell.

13
задан Mehrdad Afshari 14 January 2010 в 10:43
поделиться

6 ответов

Есть много различий. Среди них:

  1. исполняемый формат : Каждая ОС требует, чтобы двоичные файлы соответствуют определенному двоичному формату. Для Windows это портативный файл исполняемый (PE). Для Linux это эльф большую часть времени (он также поддерживает другие типы).

  2. Бинарный интерфейс приложения : Каждая ОС определяет набор функций первичной системы, а также способ их программы. Это принципиально отличается между Linux и Windows. Хотя инструкции, которые вычисляют 2 + 2, идентичны на Linux и Windows в архитектуре x86, то, как приложение запускается, как он распечатывает выход, а так, как он выходит, отличается от операционных систем.

Да, программы Linux, так и Windows на архитектуре X86 используют инструкцию, набор инструкций, которые поддерживает CPU, которая определяется Intel.

17
ответ дан 1 December 2019 в 19:02
поделиться

Да, но код неизменно вызывает библиотеку функции, чтобы сделать только что-либо - как печать «4» к терминалу. И эти библиотеки являются платформами, специфическими и отличаются между Linux и Windows. Вот почему он не портативный - не, действительно, проблема на уровне обучения.

2
ответ дан 1 December 2019 в 19:02
поделиться

Это из-за разницы Как программа загружена в память и дает ресурсы для запуска. Даже самые простые программы должны иметь кодовое пространство, пространство данных и возможность приобретения памяти выполнения и выполнять ввод / вывод. Инфраструктура для выполнения этих низкоуровневых задач полностью отличается между платформами, если у вас нет какого-либо адаптационного слоя, например вина или Cygwin.

Предполагая, однако, что вы могли бы просто вводить произвольные собранные инструкции CPU в сегмент кода и получить этот код для выполнения, то да, тот же код будет работать на любой платформе. Тем не менее, было бы довольно ограничено, и делать сложные вещи, такие как даже прыжки на внешние модули потерпят неудачу, из-за того, как эти вещи делаются по-разному на разных платформах.

13
ответ дан 1 December 2019 в 19:02
поделиться

Проблема 1 - это формат изображения. Когда приложение запущено в исполнение, ОС должен загрузить изображение Ambiaton, выясните свою точку входа и запустите ее оттуда. Это означает, что ОС должна понимать формат изображения, и между различными ОС есть разные форматы.

Проблема 2 является доступом к устройствам. После запуска приложение может прочитать и писать реестры в процессоре и вот об этом. Чтобы сделать что-нибудь интересное, как отображать символ на консоли, ему нужен доступ к устройствам, и это означает, что он должен просить такой доступ с ОС. Каждая OS имеет другой API, который предлагается получить доступ к таким устройствам.

Проблема 3 - привилегии. Недавно запущенный процесс, возможно, понадобится местоположение памяти, чтобы сохранить что-то, не может выполнить все с редакциями. Это означает, что ему необходимо выделить RAM и настроить перевод с VA на физический адрес. Это привилегии операций только ОС может сделать и снова, API для доступа к этим сервисам варьируется между OSS.

Нижняя строка заключается в том, что приложения не являются писателями для процессора, а для набора примитивных услуг Предложение ОС. Альтернатива состоит в том, чтобы написать приложения против набора примитивных услуг. Предложения виртуальной машины, и это приводит к приложениям, которые являются более или менее портативными, например, приложения Java.

4
ответ дан 1 December 2019 в 19:02
поделиться

Вот некоторые из причин, по которым я могу подумать о верхней части моей головы:

  1. различные форматы контейнера (которые до сих пор кажутся ведущим дифференциалом в этом ответе - однако его не единственная причина).
  2. Различная динамическая семантика линкера .
  3. Разные ABI .
  4. Различные механизмы обработки исключений - Windows имеет SEH - на котором построена обработка исключений C ++
  5. разных семантики системы и различных системных вызовов - отсюда различные низкоуровневые библиотеки.
2
ответ дан 1 December 2019 в 19:02
поделиться

Для второго вопроса: Windows работает только на X86, X64, а IA64 (не уверен в мобильных версиях). Для Linux см. здесь .

1
ответ дан 1 December 2019 в 19:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: