kumasysjp

.a(静的ライブラリ) の利点

Linux の .a (静的ライブラリ) は、ライブラリという名称ではあるけれども、オブジェクト(.o )の別形態ともいえる。つまり1つのプログラムにしか従属しない。

ならばどのようなメリットがあるのか。

main.c
int main(void) { hoge(); }

hoge.c
void hoge(void) { puts(“hoge”); }

fuga.c
void fuga(void) { puts(“fuga”); }

.o ファイルを作る
$ gcc -c main.c hoge.c fuga.c

.a ファイルを作る
$ ar r hoge.a hoge.o
$ ar r fuga.a fuga.o

実行ファイルを作る
$ gcc -o main1 main.o hoge.o fuga.o
main1 は、不要な fuga.o もリンクされてサイズが大きくなっています。

実行ファイルを作る
$ gcc -o main2 main.o hoge.a fuga.a
main2 は、hoge.o しかリンクされていません。

hoge.o を fuga.o を一つの libhg.a にまとめておけば、
gcc -o main main.o libhg.a だけで、必要な .oファイルだけがリンクされます。

 

デメリットは、.a に変更があった場合、それを使用するプログラムは、リンクのみならず、再ビルドが必要である。