I-8-8. ライブラリとプログラムの関係

プログラムをコンパイルしてできあがる実行ファイルと、実行ファイルから関数呼び出しで利用するライブラリの関係を説明する。また共有ライブラリの考え方と、実行時の動作、lddコマンドによる利用ライブラリの一覧やsizeコマンドによるメモリ利用状況の把握などを解説する。

【学習の要点】

* ライブラリとは、複数のプログラムが共通して利用するコードをまとめたファイルである。

* ライブラリ自体は単独で実行することはできない。

* 実行プログラムがライブラリをリンクする方法には、動的リンクと静的リンクとが存在する。

図I-8-8. 実行ファイルとライブラリの関係

【解説】

1) ライブラリとは

ライブラリとは、多くのプログラムが作成されている場合に、その中のどのプログラムにとっても共通な処理として必要と考えられる機能(プログラム)をまとめたもの。

* 様々なプログラムから利用できるように部品化されている。

* プログラムに限定されることはない。例えば定数の定義なども部品化されている。

* 単独のファイルとして、実行形式のプログラムとは別に提供されている。

* ライブラリ自体を単独で実行することはできない。

* 基本的に他のプログラムの一部として動作する。

* 複数のプログラマが、同じ目的や機能を持つプログラムを、個々に開発してしまう無駄を省く。

2) 実行ファイルとライブラリの関係

実行プログラムがライブラリをコールする方法には、動的リンクと呼ばれる方法と静的リンクと呼ばれる方法が存在する。

* 動的リンク

動的リンクとは、プログラムの起動時もしくは起動後のプログラム実行中に初めてライブラリを結合される方式である。共有ライブラリは動的リンクの仕組みを利用して実現される。

* 静的リンク

* 静的リンクとは、ソースコードのコンパイル後にオブジェクトファイルとライブラリとを結合させて、実行ファイルを作成する方法である。

* Linuxの場合、/lib、/usr/lib、/usr/local/libなどのフォルダに置かれるlibfoo.aやlibfoo.soといったファイルがライブラリである。ちなみに、ファイル名は常にlibという文字列で始まり、.soで終わる。静的ライブラリの場合は.aで終わる。

3) 共有ライブラリとは

様々なプログラムが同じライブラリを利用する場合、それぞれがメモリ上にコードを展開するとメモリの使用量が膨れ上がってしまう。それを避けるために、同一のコードを共有して利用できるように工夫されたライブラリのことを、共有ライブラリという。

4) ライブラリ関連コマンド

個々の実行ファイルとライブラリの関係などは、以下に示すコマンドなどにより参照可能である。

* 利用ライブラリの一覧表示

lddコマンド

* プログラムの使用メモリの状況

sizeコマンド

OSS Course Naviのコンテンツは IPA OSS モデルカリキュラムを基としています。

フォーラム会員企業専用

記事配信

コンテンツ配信

ユーザログイン