4 gennaio 2011

Compilazione Base di un Sorgente C

Compilare un Sorgente C

Usando Gnu/Linux prima o poi ci si ritrova inevitabilmente(almeno per chi smanetta) ad avere a che fare con il linguaggio C. Tra l'altro era mia intenzione con l' arrivo del nuovo anno di imparare il linguaggio C quindi eccomi qua a scriverne.

Vediamo come compilare un sorgente minimale in C che ci fornisce in output il famosissimo Hello World, con cui hanno avuto a che fare(almeno agli inizi) anche i guru del C.

Apriamo il nostro editor preferito e scriviamo il nostro sorgente che salveremo nel file dal nome hello.c

#include
main ()
{
printf("Hello World\n");
}

poi proseguiamo con la semplice compilazione con gcc hello.c, che crea il file di nome a.out

[archie@fobia ~]$ gcc hello.c
[archie@fobia ~]$ ls
a.out hello.c Modelli Pubblici Scrivania
Documenti Immagini Musica Scaricati Video

che possiamo eseguire con il comando di esecuzione ./a.out, che produce il nostro Hello World a video

[archie@fobia ~]$ ./a.out
Hello World!

mentre usiamo l'opzione -c di gcc per una compilazione intermedia che crea il file oggetto hello.o

[archie@fobia ~]$ gcc -c hello.c
[archie@fobia ~]$ ls
a.out hello.c Immagini Musica Scaricati Video
Documenti hello.o Modelli Pubblici Scrivania

e ne visualizziamo il suo contenuto tramite il comando file


[archie@fobia ~]$ file hello.o
hello.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped


invece se vogliamo creare del codice assembler dal nostro sorgente c, l'opzione -S crea il nostro hello.s che e per l' appunto un file assembler

[archie@fobia ~]$ gcc -S hello.c
[archie@fobia ~]$ ls
a.out hello.c hello.s Modelli Pubblici Scrivania
Documenti hello.o Immagini Musica Scaricati Video

[archie@fobia ~]$ cat hello.s
.file "hello.c"
.section .rodata
.LC0:
.string "Hello World!"
.text
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
subl $16, %esp
movl $.LC0, (%esp)
call puts
leave
ret
.size main, .-main
.ident "GCC: (GNU) 4.4.4 20100630 (Red Hat 4.4.4-10)"
.section .note.GNU-stack,"",@progbits


per visualizzare i tempi della compilazione usiamo il comando -time

[archie@fobia ~]$ gcc -time hello.c -o hello.c
# cc1 0.02 0.01
# as 0.00 0.01
# collect2 0.04 0.01
[archie@fobia ~]$

per un resocondo completo di gcc supporto al debug -g, linking ldd, ottimizzazione del codice ON, e molto altro, consiglio di scaricarvi la relativa manualistica in uno dei suoi molteplici formati.

Nessun commento: