2012-11-18 26 views
11

Tôi mới dùng Linux. Bất cứ ai có thể giải thích cho tôi sản lượng chế độ tiết từ sau cho chương trình hello world của tôi không? Ngoài ra, các tệp nào crt1.o, crti.o, crtend.o, crtbegin.ocrtn.olclgcc làm gì? Bất kỳ liên kết giải thích nào khác cũng được hoan nghênh.Giải thích đầu ra chế độ tiết đoạn 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

Đây là một phần của nó: http://dev.gentoo.org/~vapier/crt.txt – ethrbunny

+0

@ethrbunny Cảm ơn, điều đó rất hữu ích! – Gomathi

Trả lời

20

Phần đầu tiên là phiên bản và cấu hình dữ liệu cho người lái xe trình biên dịch (đó là gcc nhị phân, mà không phải là thực sự là trình biên dịch tự):

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 

Sau đó, nó sẽ in lệnh nó sử dụng để gọi trình biên dịch thực, 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 

cc1 in đó là phiên bản và thông tin cấu hình.

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 

Sau đó, cc1 cho bạn biết thư mục nào sẽ tìm kiếm bao gồm tệp.

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. 

Trình biên dịch hiện đã hoàn tất, vì vậy gcc cho bạn biết lệnh lắp ráp sẽ sử dụng.

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

Và người lắp ráp, as, cung cấp thông tin phiên bản.

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

Công cụ lắp ráp hiện được thực hiện để gcc cung cấp lệnh liên kết. Nó sử dụng collect2 làm trung gian cho mối liên kết thực sự ld, nhưng điều đó không quan trọng ở đây.

/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 

Trình liên kết không cho kết xuất tiết (try -Wl,-v), vậy là xong.

Tệp "crt" có nghĩa là "C RunTime". Chúng là các phần nhỏ của mã được chèn vào đầu chương trình của bạn và cuối cùng. Họ chăm sóc khởi tạo các biến toàn cục, đống và ngăn xếp của bạn. Họ gọi các hàm atexit sau khi bạn quay về từ main. Và một số bên cạnh đó.

Hy vọng điều đó sẽ hữu ích.

+0

Cảm ơn bạn rất nhiều. Nó đã giúp rất nhiều! – Gomathi

+2

Trình liên kết không cung cấp đầu ra tiết nếu bạn đặt '-Wl, - verbose'. Nó sẽ in các nỗ lực để có được tất cả các yếu tố đầu vào, bao gồm cả thư viện. – Interarticle

Các vấn đề liên quan