基本的には、プログラムが大規模になってきて、 以前作成した関数をあちこちで使いまわしてきたくなったときに、 ライブラリという概念が出てきます。
以下にその様子を見てみましょう。
まずはmain関数のみで。
gcc -o complib-kameda-00 complib-kameda-00.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