libc.aは実は独立した機能を持ったオブジェクトファイル(システムコールや、システムコールを呼び出すことによって実現される標準入出力関数など)がアーカイブされたものなのです。
今回は、libc.aを適当なディレクトリにコピーしてきて、そこで解凍してみて中身を検証してみました。
#libc.aのコピー
#libc.aを壊すと面倒なのでコピーしてしまうのである。
$ cp /usr/lib/libc.a .
#解凍
$ ar -x libc.a
#生成したオブジェクトファイルは1510個もある!
$ ls | wc
1510 1510 17779
#代表的なシステムコールは含まれているか!?
$ ls -l open.o creat.o close.o read.o write.o lseek.o unlink.o
-rw-r--r-- 1 kappa kappa 1136 2012-07-15 21:46 close.o
-rw-r--r-- 1 kappa kappa 1120 2012-07-15 21:46 creat.o
-rw-r--r-- 1 kappa kappa 932 2012-07-15 21:46 lseek.o
-rw-r--r-- 1 kappa kappa 1156 2012-07-15 21:46 open.o
-rw-r--r-- 1 kappa kappa 1156 2012-07-15 21:46 read.o
-rw-r--r-- 1 kappa kappa 892 2012-07-15 21:46 unlink.o
-rw-r--r-- 1 kappa kappa 1160 2012-07-15 21:46 write.o
#代表的な標準入出力関数はあるか!?
$ ls -l scanf.o fprintf.o
-rw-r--r-- 1 kappa kappa 996 2012-07-15 21:46 fprintf.o
-rw-r--r-- 1 kappa kappa 1008 2012-07-15 21:46 scanf.o
kappa@kappa:~/test/artest$
libc.aは頻繁に使用される関数のオブジェクトファイルを内包しているという点でとても大切であることがよくわかりました。