計算機序論2 ライブラリができるまで (2009)

計算機序論2メイン 2009/10/15

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

基本的には、プログラムが大規模になってきて、 以前作成した関数をあちこちで使いまわしてきたくなったときに、 ライブラリという概念が出てきます。

以下にその様子を見てみましょう。


まずは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-02lib-year.cとcomplib-kameda-02lib-string.cの中の関数は 今後も使いまわす可能性が大であると仮定してください。

complib-kameda-02main-version0.c
complib-kameda-02lib-year.c
complib-kameda-02lib-string.c

gcc -c complib-kameda-02main-version0.c
gcc -c complib-kameda-02lib-year.c
gcc -c complib-kameda-02lib-string.c
gcc -o complib-kameda-02v0 complib-kameda-02main-version0.o complib-kameda-02lib-year.o complib-kameda-02lib-string.o


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

complib-kameda-02.h
complib-kameda-02main-version1.c

gcc -c complib-kameda-02main-version1.c
gcc -o complib-kameda-02v1 complib-kameda-02main-version1.o complib-kameda-02lib-year.o complib-kameda-02lib-string.o


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

ar -rc libkameda02.a complib-kameda-02lib-year.o complib-kameda-02lib-string.o


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

gcc -o complib-kameda-02bylib complib-kameda-02main-version1.c -L. -lkameda02


ライブラリを作成する際には、関数の定義とエラー処理が重要。
関数の返り値をエラー処理に用いる。

ライブラリ用:
complib-kameda-03.h
関数の定義(ドキュメント⇒これが man page になる)
complib-kameda-03lib-year.c
complib-kameda-03lib-string.c

ライブラリ作成:
gcc -c complib-kameda-03lib-year.c
gcc -c complib-kameda-03lib-string.c
ar -rc libkameda03.a complib-kameda-03lib-year.o complib-kameda-03lib-string.o

ユーザプログラム:
complib-kameda-03main.c

ライブラリを使ったコンパイル:
gcc -o complib-kameda-03 complib-kameda-03main.c -L. -lkameda03