次のページ 前のページ 目次へ

5. GNU C ライブラリ

コンピュータの起動において次に起こる出来事は、init プロセスがロード され実行されるということである。しかし、init は、他のほとんどのプロ グラムと同様にライブラリの関数を利用している。

以下のような C プログラムの例題をみたことがあるかもしれない。

        main() {
                printf("Hello World!\n");
        }

このプログラムでは、printf が定義されていないが、その定義はどこ から来るのか?それは標準 C ライブラリから、すなわち GNU/Linux システム上で あれば glibc から来る。 もし Visual C++ でコンパイルしたなら、同じ標準関数を持った Microsoft の実装か ら来る。このような標準関数は、計算、文字列、日付、メモリアロケーションなど 様々な領域で、無数に存在している。Linux を含む Unix の全ては、C 言語で書かれ たものと、なんとかして C で書かれたように見せかけようとするもののいずれかで出 来ているので、すべてがそうした関数を使用する。

Linux システムの /lib を見れば、libxxx.solibxxx.a といったファイルがたくさんあるのが分かるだろう。それらは、こうした関数 のライブラリである。glibc は、こうした関数についての GNU の実装であ る。

ライブラリ関数を使う方法には二種類ある。静的(statically) にプログラムにリンク すれば、そうした関数はできあがった実行ファイルにコピーされて、組み込まれる。 動的(dynamically) にプログラムにリンクすれば(これが普通であるが)、プログラム が実行されてそのライブラリコードが必要になったときに、libxxx.so から 呼び出される。

特定のプログラムにどのライブラリが必要なのか調べたいときは、ldd コマンドが役に立つ。たとえば、以下は bash が使うライブラリである。

        [greg@Curry power2bash]$ ldd /bin/bash
                libtermcap.so.2 => /lib/libtermcap.so.2 (0x40019000)
                libc.so.6 => /lib/libc.so.6 (0x4001d000)
                /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

5.1 設定

ライブラリにある関数のいくつかは、あなたがどこに住んでいるかに依存している。 たとえば、オーストラリアなら、日付は 日/月/年と表記するが、アメリカでは、 月/日/年と表記する。glibc が配布されるときには localedef と呼ばれるプログラムが付属し、それによってこうしたことの設定ができるように なっている。

5.2 演習

あなたの好きなプログラムがどんなライブラリを使っているのかを ldd で調べてみること。

init がどんなライブラリを使うのか、ldd で調べること。

ひとつかふたつだけの関数が入ったおもちゃのライブラリを作ること。それを作るに は、ar というプログラムを使う。ar の man ページは、作り方を 調べる出発点になる。そして、そのライブラリを使うプログラムを書いて、コンパイ ルして、リンクすること。

5.3 参考文献等


次のページ 前のページ 目次へ