2012-11-18 11 views
11

Sono nuovo di linux. Qualcuno può spiegarmi il seguente output in modalità verbosa per il mio programma Hello Hello World? Inoltre, cosa fanno i file crt1.o, crti.o, crtend.o, crtbegin.o e crtn.o e lc e lgcc? Ogni altro link esplicativo è il benvenuto.Spiegazione uscita modalità dettagliata GCC

$ gcc -v hello.c 

Reading specs from /usr/lib/gcc-lib/i686/3.3.1/specs 
Configured with: ../configure --prefix=/usr 
Thread model: posix 
gcc version 3.3.1 
/usr/lib/gcc-lib/i686/3.3.1/cc1 -quiet -v -D__GNUC__=3 
-D__GNUC_MINOR__=3 -D__GNUC_PATCHLEVEL__=1 
hello.c -quiet -dumpbase hello.c -auxbase hello -Wall 
-version -o /tmp/cceCee26.s 
GNU C version 3.3.1 (i686-pc-linux-gnu) 
compiled by GNU C version 3.3.1 (i686-pc-linux-gnu) 
GGC heuristics: --param ggc-min-expand=51 
--param ggc-min-heapsize=40036 
ignoring nonexistent directory "/usr/i686/include" 
#include "..." search starts here: 
#include <...> search starts here: 
/usr/local/include 
/usr/include 
/usr/lib/gcc-lib/i686/3.3.1/include 
/usr/include 
End of search list. 
as -V -Qy -o /tmp/ccQynbTm.o /tmp/cceCee26.s 
GNU assembler version 2.12.90.0.1 (i386-linux) 
using BFD version 2.12.90.0.1 20020307 Debian/GNU 
Linux 
/usr/lib/gcc-lib/i686/3.3.1/collect2 
--eh-frame-hdr -m elf_i386 -dynamic-linker 
/lib/ld-linux.so.2 /usr/lib/crt1.o /usr/lib/crti.o 
/usr/lib/gcc-lib/i686/3.3.1/crtbegin.o 
-L/usr/lib/gcc-lib/i686/3.3.1 
-L/usr/lib/gcc-lib/i686/3.3.1/../../.. /tmp/ccQynbTm.o 
-lgcc -lgcc_eh -lc -lgcc -lgcc_eh 
/usr/lib/gcc-lib/i686/3.3.1/crtend.o 
/usr/lib/crtn.o 
+1

Ecco una parte di esso: http://dev.gentoo.org/~vapier/crt.txt – ethrbunny

+0

@ethrbunny Grazie, è stato utile! – Gomathi

risposta

20

La prima parte è i dati della versione e configurazione per il driver del compilatore (che è il gcc binario, che non è in realtà il compilatore stesso):

Reading specs from /usr/lib/gcc-lib/i686/3.3.1/specs 
Configured with: ../configure --prefix=/usr 
Thread model: posix 
gcc version 3.3.1 

quindi stampa il comando che utilizza per chiamare il vero compilatore, cc1:

/usr/lib/gcc-lib/i686/3.3.1/cc1 -quiet -v -D__GNUC__=3 
-D__GNUC_MINOR__=3 -D__GNUC_PATCHLEVEL__=1 
hello.c -quiet -dumpbase hello.c -auxbase hello -Wall 
-version -o /tmp/cceCee26.s 

e cc1 stampe è la versione e le informazioni di configurazione.

GNU C version 3.3.1 (i686-pc-linux-gnu) 
compiled by GNU C version 3.3.1 (i686-pc-linux-gnu) 
GGC heuristics: --param ggc-min-expand=51 
--param ggc-min-heapsize=40036 

Poi cc1 ti dice quello che le directory cercherà file di inclusione.

ignoring nonexistent directory "/usr/i686/include" 
#include "..." search starts here: 
#include <...> search starts here: 
/usr/local/include 
/usr/include 
/usr/lib/gcc-lib/i686/3.3.1/include 
/usr/include 
End of search list. 

Il compilatore è ora completo, in modo da gcc ti dice il comando assembler userà.

as -V -Qy -o /tmp/ccQynbTm.o /tmp/cceCee26.s 

E l'assemblatore, as, dà la sua versione di informazioni.

GNU assembler version 2.12.90.0.1 (i386-linux) 
using BFD version 2.12.90.0.1 20020307 Debian/GNU 
Linux 

L'assemblatore è ora fatto in modo gcc dà il comando linker. Sta usando collect2 come intermediario per il linker reale ld, ma non è importante qui.

/usr/lib/gcc-lib/i686/3.3.1/collect2 
--eh-frame-hdr -m elf_i386 -dynamic-linker 
/lib/ld-linux.so.2 /usr/lib/crt1.o /usr/lib/crti.o 
/usr/lib/gcc-lib/i686/3.3.1/crtbegin.o 
-L/usr/lib/gcc-lib/i686/3.3.1 
-L/usr/lib/gcc-lib/i686/3.3.1/../../.. /tmp/ccQynbTm.o 
-lgcc -lgcc_eh -lc -lgcc -lgcc_eh 
/usr/lib/gcc-lib/i686/3.3.1/crtend.o 
/usr/lib/crtn.o 

Il linker non fornisce alcuna output dettagliato (provate -Wl,-v), quindi il gioco è fatto.

I file "crt" indicano "C RunTime". Sono piccole sezioni di codice inserite all'inizio del programma e alla fine. Si occupano dell'inizializzazione delle variabili globali, dell'heap e dello stack. Chiamano le funzioni atexit dopo il ritorno da main. E ancora un altro.

Spero che questo aiuti.

+0

Grazie mille. Ha aiutato molto! – Gomathi

+2

Il linker fornisce un output dettagliato se si imposta '-Wl, - verbose'. Stampa i tentativi di acquisire tutti gli input, comprese le librerie. – Interarticle

Problemi correlati