alles wat u wilt weten over GCC

noteer uit de bovenstaande uitvoer van het vooraf verwerkte bestand dat sinds ons programma de stdio heeft aangevraagd.h header worden opgenomen in onze bron die op zijn beurt, verzocht een hele hoop andere header bestanden.

compilatie

de volgende stap is het vooraf verwerkte bestand als invoer te nemen, het samen te stellen en een tussenliggende gecompileerde uitvoer te produceren. Het uitvoerbestand voor dit stadium produceert Montagecode die machineafhankelijk is.

door “-S” vlag te gebruiken met gcc kunnen we de vooraf verwerkte C broncode omzetten in assembly taal zonder een object bestand aan te maken:

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

gecompileerd bestand

hoewel ik niet veel in assembly level programmeren ben, concludeert een snelle blik dat deze assembly level output in een of andere vorm van instructies is die de assembler kan begrijpen en omzetten in machine level taal.

Assembly

zoals we allemaal weten ,kunnen machines alleen binaire taal begrijpen, dus nu hebben we een ASSEMBLER nodig die assemble code converteert in “HelloWorld.C ” bestand in binaire code.ASSEMBLER was een van de eerste softwaretools die werd ontwikkeld na de uitvinding van de digitale computer.

als er externe functies worden aangeroepen in de montagecode, laat de Assembler de adressen van de externe functies niet gedefinieerd, die later door de Linker worden ingevuld.

de Assembler kan worden aangeroepen zoals hieronder getoond. Door de “- C ” – vlag in gcc te gebruiken, kunnen we de assemblagecode omzetten in de code van het machineniveau:

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

HelloWorld.o

het enige wat we kunnen verklaren door naar de HelloWorld te kijken.o bestand gaat over de tekenreeks ELF in de eerste regel. ELF staat voor uitvoerbaar en koppelbaar formaat.

een objectbestand en een uitvoerbaar bestand komen in verschillende formaten zoals ELF (Executable and Linking Format) en COFF (Common Object-File Format). ELF wordt bijvoorbeeld gebruikt op Linux-systemen, terwijl COFF wordt gebruikt op Windows-systemen.

dit is een relatief nieuw formaat voor objectbestanden en uitvoerbare bestanden op machineniveau die door gcc worden geproduceerd. Voorafgaand aan deze, een formaat bekend als een.out werd gebruikt. Van ELF wordt gezegd dat het een geavanceerder formaat is dan een.out (we zouden dieper in het ELF formaat kunnen graven in een ander toekomstig artikel).

als u uw code compileert zonder de naam van het uitvoerbestand op te geven, heeft het geproduceerde uitvoerbestand de naam ‘A.out’, maar het formaat is nu veranderd in ELF. Het is gewoon dat de standaard uitvoerbare bestandsnaam hetzelfde blijft.

Linking

dit is de laatste fase waarin alle linking van functieaanroepen met hun definities wordt uitgevoerd. Linker weet waar al deze functies zijn geïmplementeerd (Assembler heeft het adres van alle externe functies achtergelaten). Tot deze fase Weet GCC niet van de functie zoals printf() .De Assembler zou het adres van de aan te roepen functies hebben achtergelaten en Linker doet het laatste proces van het invullen van deze adressen met de eigenlijke definities. De linker doet ook een paar extra taken voor ons. Het combineert ons programma met een aantal standaard routines die nodig zijn om ons programma te laten draaien. Dus de uiteindelijke uitvoerbare grootte is veel meer dan het invoerbestand!

het gehele koppelingsproces wordt door gcc afgehandeld en als volgt aangeroepen:

$ gcc -o Output HelloWorld.c

het bovenstaande commando voert het bestand ” HelloWorld.c “en produceert het definitieve uitvoerbare bestand “Output”.

een lijst van alle bestanden met ls-l

zoals je kunt zien, is ‘Output’ bestand standaard een uitvoerbaar bestand met permissies-rwxrwxr-x ,Dit betekent gewoon dat het uitvoerbare rechten heeft voor alle gebruikers(eigenaar,groep en anderen). Als u dit uitvoerbare bestand uit te voeren door simpelweg te typen ‘./ Output ‘ u krijgt de uiteindelijke output van ons Programma !

uitvoer van het uitvoerbare bestand

dus nu weten we hoe een C-programma wordt geconverteerd naar een uitvoerbaar bestand . In de komende artikelen zullen we wat dieper ingaan op C-programmering. Tot dan, gelukkig leren! 🙂

You might also like

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.