2012-11-18 16 views
11

私はlinuxを初めて使っています。誰も私のこんにちは世界プログラムのために次の冗長モード出力を私に説明することができますか?また、ファイルcrt1.ocrti.ocrtend.ocrtbegin.oおよびcrtn.oおよびlcおよびlgccのファイルは何ですか?その他の説明リンクも歓迎します。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

ここにその一部があります:http://dev.gentoo.org/~vapier/crt.txt – ethrbunny

+0

@ethrbunnyありがとうございました! – Gomathi

答えて

20

最初の部分(すなわち、実際にコンパイラ自体はないgccバイナリ、'S)コンパイラドライバのバージョンおよび設定データである:

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 

そしてcc1版画:cc1、本当のコンパイラを呼び出します。

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 

次に、cc1は、インクルードファイルを検索するディレクトリを示します。

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. 

コンパイラが完了しましたので、gccはあなたにそれが使用するアセンブラコマンドに指示します。

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

アセンブラ、asはバージョン情報を提供します。

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

アセンブラが完了しましたので、gccはリンカコマンドを与えます。実際のリンカldの仲介としてcollect2を使用していますが、ここでは重要ではありません。

/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 

リンカは何も詳細な出力を与えない(-Wl,-vを試してみてください)ので、それはそれです。

"crt"ファイルは "C RunTime"を意味します。これらは、プログラムの最初と最後に挿入されたコードの小さな部分です。グローバル変数、ヒープ、スタックの初期化を行います。彼らはmainから戻った後にatexit関数を呼び出します。それ以外にもいくつかあります。

希望に役立ちます。

+0

ありがとうございました。それは多くの助けになりました! – Gomathi

+2

'-Wl、 - verbose'を設定すると、リンカは冗長な出力を出します。ライブラリを含むすべての入力を取得しようとする試みが表示されます。 – Interarticle

関連する問題