計算機序論2 コンパイルとライブラリの作成

演習課題用ファイルのページ, 計算機序論2(2009)メイン 2009/10/15

コンパイルの内情を示すサンプル

*.cはソースファイル、*.EはCプリプロセッサ実行結果、*.Sはアセンブリ言語へのコンパイル結果を示す。

$ gcc -E compiling-sample.c > compiling-sample.E
$ gcc -S compiling-sample.c > compiling-sample.S

compiling-sample.c
compiling-sample.E
compiling-sample.S


スコープ(変数の影響範囲)

スコープ(変数の影響範囲)を示すサンプルプログラムです。 ブロック(中括弧"{"‥‥"}")を用いると、スコープが1段下がります。

blocking-sample.c
blocking-sample.E
blocking-sample.S


分割コンパイルからライブラリの作成まで


まずはmain関数のみで。

complib-kameda-00.c

gcc -o complib-kameda-00 complib-kameda-00.c


関数を分離。

complib-kameda-01.c

gcc -o complib-kameda-01 complib-kameda-01.c


複数ファイル化。
特にcomplib-kameda-02b.c/complib-kameda-02c.cの中の関数は 今後も使いまわす可能性が大であると仮定してください。

complib-kameda-02a.c
complib-kameda-02b.c
complib-kameda-02c.c

gcc -c complib-kameda-02a.c
gcc -c complib-kameda-02b.c
gcc -c complib-kameda-02c.c
gcc -o complib-kameda-02 complib-kameda-02a.o complib-kameda-02b.o complib-kameda-02c.o


関数定義のHeaderファイル化。
complib-kameda-02b.c/complib-kameda-02c.cの中の関数に合わせて、week0_kameda.hを用意。

complib-kameda.h
complib-kameda-03a.c

gcc -c complib-kameda-03a.c
gcc -o complib-kameda-03 complib-kameda-03a.o complib-kameda-02b.o complib-kameda-02c.o


ライブラリ(libkameda.a)を作成する。オブジェクトファイルは続けて幾らでも付けられる。

ar -rc libkameda.a complib-kameda-02a.o complib-kameda-02b.o


ライブラリを用いたコンパイル。
今はライブラリの中のオブジェクトファイルが2つだけだが、 複数になると便利になってくる。

gcc -o complib-kameda-03 complib-kameda-03a.c -L. -lkameda


kameda[at]iit.tsukuba.ac.jp