компилятор - различия платформы - PullRequest
1 голос
/ 22 марта 2012

Если компилятор включает исходный код в машинный код (двоичный) для конкретного процессора (скажем, Intel), зачем нам нужен компилятор для Linux и другой компилятор для Windows, если обе операционные системы имеют одинаковые процессоры? Почему платформа компилятора зависит?

Почему я не могу запустить скомпилированный двоичный файл (скажем, я скомпилировал файл в Linux с gcc -Wall -o file file.c) как в Linux, так и вдовах без перекомпиляции?

Спасибо

1 Ответ

1 голос
/ 22 марта 2012

Представьте, что у вас есть исполняемый файл.Операционная система должна загрузить его в память.Даже это не портативно.Что загружать, где находится код, какие функции он будет импортировать из других библиотек DLL и т. Д., Записывается в исполняемый файл, и каждая ОС имеет свой собственный формат.См. Следующие ссылки:

Теперь представьте, что из-за магии у ОС есть все в памяти, она сопоставлена ​​со своими структурами и даже знает адрес основной функции, которую нужно вызвать.Ваша программа, даже для записи строки на экране, должна вызывать функцию CRT или OS API .С помощью CRT он не знает, что делать, они различаются в двух средах, и даже API различаются.

Даже если, представьте себе снова (в Windows реализовано подмножество POSIX API ), у него есть общая функция вызова, он не знает, как ее вызвать из-за различных соглашений о вызовах .

...