Может ли исполняемый файл C работать во всех операционных системах

Если я создаю исполняемый файл C в операционной системе (например, Windows), может ли этот файл работать в других операционных системах (таких как: Linux, Mac-OS).


person Lakshman Siddartha    schedule 18.09.2015    source источник
comment
Нет, исполняемые файлы предназначены для конкретной целевой платформы. А если программа использует специфичные для платформы функции (например, WIN32 API), то вы даже не сможете скомпилировать исходный код для других платформ.   -  person Some programmer dude    schedule 18.09.2015


Ответы (2)


Пытаясь дать полный ответ, это было бы теоретическое «да» с действительно большим «но».

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

Есть два вопроса по этому поводу. Операционные системы имеют разные форматы файлов для хранения двоичного файла (который обычно состоит из разделов для кода, данных и т. д., а также некоторой метаинформации, сообщающей системе, где их размещать, какие перемещения выполнять и т. д.). Кроме того, операционные системы также каким-то образом раскрывают свои API для двоичных файлов (для Windows это набор системных DLL).

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

Я просто предполагаю, что вы читаете о том, что C не зависит от платформы. Это верно, но относится только к исходному коду. Программа C, использующая только стандартный C, будет скомпилирована (и ЗАТЕМ запущена) на любой платформе, если у вас есть компилятор C для нее.

person Community    schedule 18.09.2015

Не существует такой вещи, как «исполняемый файл C». Компилятор C транслирует исходный код C в конкретную целевую систему. Формат исполняемого файла будет указан в ОС. Поэтому, если вы используете компилятор C для Linux, он создаст исполняемый файл, который работает только в Linux.

Однако, если код представляет собой чистый стандартный C, вы можете взять тот же самый исходный код и скомпилировать его для другой платформы на другом компиляторе. Также известен как портирование программы.

person Lundin    schedule 18.09.2015