Alt du vil vite OM GCC

Merk fra ovennevnte utgang av den forhåndsbehandlede filen som siden vårt program har bedt om stdio.h header bli inkludert i vår kilde som i sin tur, bedt om en hel haug med andre header filer.

Kompilering

det neste trinnet er å ta Den Forhåndsbehandlede filen som inngang, kompilere den og produsere en mellomliggende kompilert utgang. Utdatafilen for dette stadiet produserer Monteringskode som er maskinavhengig.

ved å bruke»- s » flagg med gcc kan vi konvertere den forhåndsbehandlede c kildekoden til assembly language uten å lage en objektfil:

$ gcc -S HelloWorld.i -o HelloWorld.s

Kompilert Fil

Selv Om Jeg ikke er mye i montering nivå programmering, men en rask titt konkluderer med at denne forsamlingen nivå utgang er i noen form for instruksjoner som assembler kan forstå og konvertere den til maskin nivå språk.

Montering

som vi alle vet ,kan maskiner forstå bare binært språk,så nå krever vi EN ASSEMBLER som konverterer monteringskode i » HelloWorld.c » fil i binær kode.

ASSEMBLER var et av de første programvareverktøyene som ble utviklet etter oppfinnelsen av den digitale datamaskinen.

Hvis det er noen samtaler til eksterne funksjoner i samlingskoden, Forlater Assembler adressene til de eksterne funksjonene udefinert, som skal fylles ut senere av Linkeren.

Assembleren kan påberopes som vist nedenfor. Ved å bruke» – c » flagg i gcc kan vi konvertere monteringskoden til maskinnivåkode:

$ gcc -c HelloWorld.c -o HelloWorld.o

HelloWorld.o

Det eneste vi kan forklare ved å se På HelloWorld.o-filen handler om strengen ELF i første linje. ELF står for executable og linkable format.

en objektfil og en kjørbar fil kommer i flere formater som ELF (Kjørbar Og Linking Format) og Coff (Common Object-File Format). FOR Eksempel BRUKES ELF På Linux-systemer, MENS COFF brukes På Windows-systemer.

Dette er et relativt nytt format for maskinnivå objektfiler og kjørbar som er produsert av gcc. Før dette ble et format kjent som en.out brukt. Elf sies å være mer sofistikert format enn a.out (Vi kan grave dypere inn I ELF-formatet i en annen fremtidig artikkel).

hvis du kompilerer koden din uten å spesifisere navnet på utdatafilen, har utdatafilen produsert navn ‘a.out’, men formatet har nå endret SEG TIL ELF. Det er bare at standard kjørbar filnavn forblir den samme.

Linking

Dette er den siste fasen der all kobling av funksjonssamtaler med deres definisjoner er gjort. Linker vet hvor alle disse funksjonene er implementert (Assembler har forlatt adressen til alle eksterne funksjoner som skal kalles). Til dette stadiet VET GCC ikke om funksjonen som printf ().Assembler ville ha forlatt adressen til funksjonene som skal kalles og Linker gjør den endelige prosessen med å fylle ut disse adressene med de faktiske definisjonene. Linkeren gjør også noen ekstra oppgaver for oss. Den kombinerer vårt program med noen standard rutiner som er nødvendig for å gjøre vårt program kjøre. Så den endelige kjørbare størrelsen er mye mer enn inngangsfilen!

hele koblingsprosessen håndteres av gcc og påberopes som følger:

$ gcc -o Output HelloWorld.c

kommandoen ovenfor kjører filen » HelloWorld.c «og produserer den endelige kjørbare filen «Output».

oppføring av alle filene ved hjelp av ls-l

som du kan se, Er Utdatafilen som standard en kjørbar fil med tillatelser-rwxrwxr-x, dette betyr bare at den har kjørbar tillatelse for alle brukerne(eier, gruppe og andre). Hvis du kjører denne kjørbare filen ved å skrive ‘./ Output ‘ du får den endelige produksjonen av Vårt Program !

Utgang av den kjørbare filen

så nå vet vi hvordan Et C-program blir konvertert til en kjørbar. Vi vil dykke litt dypere Inn I C programmering i de kommende artiklene. Inntil Da, Glad Læring! 🙂

You might also like

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.