2012-11-18 14 views
11

Linux'da yeni. Merhaba dünya programım için aşağıdaki ayrıntılı mod çıktısını bana açıklayabilir mi? Ayrıca, crt1.o, , crtend.o, ve crtn.o veve lgcc dosyaları ne yapar? Diğer açıklayıcı bağlantılar da kabul edilir.GCC ayrıntılı mod çıkış açıklaması

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 

O zaman bunun için kullandığı komutu yazdırır:

$ 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

İşte bir parçası: http://dev.gentoo.org/~vapier/crt.txt – ethrbunny

+0

@ethrbunny Teşekkürler, bu yardımcı oldu! – Gomathi

cevap

20

ilk bölümü derleyici sürücüsü için sürüm ve yapılandırma verileri (aslında derleyici kendisi değil gcc ikili, var) 'dir o sürümü ve yapılandırma bilgileri var

/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 

ve cc1 baskılar: gerçek derleyici, cc1 diyoruz.

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 

Sonra cc1 o dosyaları dahil arayacaktır dizinleri söyler.

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. 

derleyici

yüzden gcc size kullanacağını montajcı komutu söyler, artık tamamlanmıştır.
as -V -Qy -o /tmp/ccQynbTm.o /tmp/cceCee26.s 

Ve montajcı

, as, onun versiyonu bilgi verir. montajcı şimdi yapılıyor

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

yüzden gcc bağlayıcı komutunu verir. collect2'u gerçek bağlayıcı ld'a aracı olarak kullanıyor, ancak bu önemli değil.

/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 

bağlayıcı hiçbir ayrıntılı çıktı (-Wl,-v deneyin) verir, bu yüzden bu kadar.

"crt" dosyaları "C RunTime" anlamına gelir. Bunlar, programınızın başlangıcında ve sonunda en küçük kod bölümleridir. Global değişkenlerinizi, yığınlarınızı ve yığınlarınızı başlatmaya özen gösterirler. main'dan döndükten sonra atexit işlevlerini çağırırlar. Ve biraz daha fazlası.

Bu yardımcı olur umarım.

+0

Çok teşekkür ederim. Çok yardımcı oldu! – Gomathi

+2

Bağlayıcı, -Wl, - verbose' öğesini ayarlarsanız ayrıntılı çıktı verir. Kütüphaneler dahil tüm girdileri elde etme girişimlerini basacaktır. – Interarticle