Kas ir kompilācija?
Kompilācija ir avota koda pārvēršanas process objekta kodā. Tas tiek darīts ar kompilatora palīdzību. Kompilators pārbauda, vai avota kodā nav sintaktisku vai strukturālu kļūdu, un, ja pirmkods ir bez kļūdām, tas ģenerē objekta kodu.
C kompilācijas process pārvērš avota kodu, kas ņemts kā ievade, objekta kodā vai mašīnas kodā. Kompilācijas procesu var iedalīt četros posmos, t.i., pirmapstrāde, kompilēšana, salikšana un saistīšana.
Priekšapstrādātājs izmanto avota kodu kā ievadi un noņem visus komentārus no avota koda. Priekšapstrādātājs ņem priekšapstrādātāja direktīvu un interpretē to. Piemēram, ja , direktīva ir pieejama programmā, tad priekšapstrādātājs interpretē direktīvu un aizstāj šo direktīvu ar saturu 'stdio.h' failu.
linux failu sistēma
Tālāk ir norādītas fāzes, kuras mūsu programma iziet, pirms tā tiek pārveidota izpildāmā formā:
Priekšapstrādātājs
Avota kods ir kods, kas ir ierakstīts teksta redaktorā, un avota koda failam ir piešķirts paplašinājums “.c”. Šis avota kods vispirms tiek nodots priekšapstrādātājam, un pēc tam priekšapstrādātājs paplašina šo kodu. Pēc koda paplašināšanas paplašinātais kods tiek nodots kompilatoram.
Kompilators
Kods, ko paplašina priekšprocesors, tiek nodots kompilatoram. Kompilators pārvērš šo kodu montāžas kodā. Vai arī mēs varam teikt, ka C kompilators pārvērš iepriekš apstrādāto kodu montāžas kodā.
Montētājs
Montāžas kods tiek pārveidots par objekta kodu, izmantojot montētāju. Montētāja ģenerētā objekta faila nosaukums ir tāds pats kā avota failam. Objekta faila paplašinājums DOS ir '.obj', un UNIX paplašinājums ir 'o'. Ja avota faila nosaukums ir 'hello.c', tad objekta faila nosaukums būtu 'hello.obj'.
Saistītājs
Galvenokārt visas C valodā rakstītās programmas izmanto bibliotēkas funkcijas. Šīs bibliotēkas funkcijas ir iepriekš kompilētas, un šo bibliotēkas failu objekta kods tiek saglabāts ar paplašinājumu “.lib” (vai “.a”). Linkera galvenais uzdevums ir apvienot bibliotēkas failu objekta kodu ar mūsu programmas objekta kodu. Dažkārt rodas situācija, kad mūsu programma atsaucas uz citos failos definētajām funkcijām; tad linkerim šajā ziņā ir ļoti svarīga loma. Tas saista šo failu objekta kodu ar mūsu programmu. Tāpēc mēs secinām, ka linkera uzdevums ir saistīt mūsu programmas objekta kodu ar bibliotēkas failu un citu failu objekta kodu. Saistītāja izvade ir izpildāmais fails. Izpildāmā faila nosaukums ir tāds pats kā avota failam, taču atšķiras tikai pēc paplašinājumiem. Operētājsistēmā DOS izpildāmā faila paplašinājums ir “.exe”, savukārt UNIX izpildāmā faila nosaukumu var nosaukt kā “a.out”. Piemēram, ja programmā izmantojam funkciju printf(), tad saistītājs pievieno saistīto kodu izvades failā.
Sapratīsim, izmantojot piemēru.
sveiki.c
#include int main() { printf('Hello javaTpoint'); return 0; }
Tagad mēs izveidosim iepriekš minētās programmas plūsmas diagrammu:
Iepriekš redzamajā plūsmas diagrammā programmas izpildei tiek veiktas šādas darbības:
- Pirmkārt, ievades fails, t.i., sveiki.c, tiek nodots priekšapstrādātājam, un priekšapstrādātājs pārvērš avota kodu paplašinātā avota kodā. Paplašinātā pirmkoda paplašinājums būtu sveiks.i.
- Paplašinātais avota kods tiek nodots kompilatoram, un kompilators pārvērš šo paplašināto avota kodu montāžas kodā. Montāžas koda paplašinājums būtu sveiki.s.
- Pēc tam šis montāžas kods tiek nosūtīts montētājam, kas pārvērš montāžas kodu objekta kodā.
- Pēc objekta koda izveides saistītājs izveido izpildāmo failu. Pēc tam ielādētājs izpildei ielādēs izpildāmo failu.