Може ли 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 и б.) превежда win32 API извиквания в API извиквания на вашата целева платформа. Това между другото прави вино.

Просто предполагам, че идвате от това, че сте прочели, че C е независим от платформа. Това е вярно, но се отнася само за изходния код. C програма, която не използва нищо друго освен стандартен C, ще се компилира (и СЛЕД това ще се изпълнява) на всяка платформа, стига да имате C компилатор за нея.

person Community    schedule 18.09.2015

Няма такова нещо като "C изпълним файл". Компилаторът на C превежда изходния код на C в конкретната целева система. Форматът на изпълнимия файл ще бъде този, определен от операционната система. Така че, ако използвате C компилатор за Linux, той ще създаде изпълним файл, който работи само на Linux.

Въпреки това, ако кодът е чист стандартен C, можете да вземете същия изходен код и да го компилирате за различна платформа на различен компилатор. Също известен като пренасяне на програмата.

person Lundin    schedule 18.09.2015