Binary2.0勉強会 8
とか第0回で言ってたので、そっち方面に進みます。
Cのソースコードが実行形式になるまでの道は長く険しいのだ。
全部を全部 gcc がやっているということはなくって、実は gcc は内部で別のプログラムを呼んでて、gcc の仕事はそれらのコマンドをどうこうする部分のようです。
おもむろに gcc --help すると、
-v コンパイラによって起動されるプログラムを表示
とかあるので試してみましょう。
niha@hoge:~/src/c$ gcc -v bin05.c Using built-in specs. Target: i486-linux-gnu コンフィグオプション: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr (略) スレッドモデル: posix gcc バージョン 4.2.3 (Ubuntu 4.2.3-2ubuntu7) /usr/lib/gcc/i486-linux-gnu/4.2.3/cc1 -quiet -v bin05.c (略) 存在しないディレクトリ "/usr/local/include/i486-linux-gnu" を無視します 存在しないディレクトリ "/usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../i486-linux-gnu/include" を無視します 存在しないディレクトリ "/usr/include/i486-linux-gnu" を無視します #include "..." の探索はここから始まります: #include <...> の探索はここから始まります: /usr/local/include /usr/lib/gcc/i486-linux-gnu/4.2.3/include /usr/include 探索リストの終わり GNU C version 4.2.3 (Ubuntu 4.2.3-2ubuntu7) (i486-linux-gnu) compiled by GNU C version 4.2.3 (Ubuntu 4.2.3-2ubuntu7). GGC heuristics: --param ggc-min-expand=64 --param ggc-min-heapsize=64428 Compiler executable checksum: cd267a1ce4b47763f08e41c54a4f8f5c as --traditional-format -V -Qy -o /tmp/ccIevCFL.o /tmp/ccvXJifO.s GNU assembler version 2.18.0 (i486-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.18.0.20080103 /usr/lib/gcc/i486-linux-gnu/4.2.3/collect2 --eh-frame-hdr -m elf_i386 --hash-style=both -dynamic-linker (略)
cc1 as collect2 の三つがわけわからんオプションいっぱいつけて呼ばれてるようです。
4つの工程があったはずなんですが三つしかないですね。これ以上続けると長さが半端になりそうなのでここで切って、次回は三つのプログラムの簡単な説明を。