Почему код, скомпилированный в Linux, не работает в Windows?

Я просто хочу сказать, что если обе ОС работают на одном и том же оборудовании, а исполняемый файл содержит 0 и 1 только на машинном языке, то почему мы должны перекомпилировать для каждой из них, а не просто изменить расширение исполняемого файла? файлы, такие как *.out to *.exe для запуска кода?

2 ответа

Исполняемые файлы Windows и Linux имеют разный формат. Даже если они имеют одинаковый формат, API, предоставляемые двумя операционными системами, различаются.

Apple столкнулась с аналогичной проблемой, когда они переходили с PowerPC на x86. Их решением были Universal Binaries. Они выглядели как один исполняемый файл для пользователя; однако, под капотом они были двумя отдельными двоичными файлами, связанными вместе.

Чтобы ответить аналогичным образом - потому что ОС по-разному интерпретирует содержимое файла. Ищет разные вещи в разных местах в заголовке файла и так далее... Таким образом, Windows будет пытаться интерпретировать бинарный файл Linux как PE и потерпит неудачу

Другие вопросы по тегам