次: , 上: A Shared Library


7.3.1 Libtoolの概念

Libtoolは,共有ライブラリとスタティックライブラリを統一した概念で, libtoolライブラリ(libtool libraries)と呼ばれるものに抽出します. Libtoolライブラリは.la接尾子を使用しているファイルで,スタティッ クライブラリ,共有ライブラリ,または両方を表します.正確な性質は ./configureが実行されるまで決定することは不可能です.すべてのプ ラットフォームですべての種類のライブラリをサポートしているわけではあり ませんし,ユーザは明示的にビルドするライブラリを選択するすることも可能 です.(しかし,パッケージの管理者はデフォルトを調整することが可能です. See The AC_PROG_LIBTOOL macro.)

共有ライブラリとスタティックライブラリのオブジェクトファイルは,別々に コンパイルする必要があるので,libtoolはコンパイル時にも使用されます. libtoolでビルドされたライブラリは,libtoolオブジェクト(libtool objects)と呼ばれます.これらは,.lo接尾子を利用しているファイ ルです.libtoolライブラリはこれらのlibtoolオブジェクトからビルドされま す.

.la.loファイルの構造や,libtoolがそれらを構築する方法 を仮定すべきではありません.これはlibtoolが考えることで,最後のものは libtoolの中身を勉強したい人が欲しいものです.しかし,これらのファイル は,libtoolライブラリをビルドするとき,Makefileルール内のターゲッ トと依存性として使用されるので,その存在が重要になります.例えば,条件 的にソースファイルをビルドする依存性を表現するとき,これらを参照する必 要がある状況があります(see Conditional Libtool Sources).

動的にロードされるモジュールとなっているプラグインシステムを書こうと考 えている人々は,libltdlの中を見るべきです.libtoolによるライブ ラリのdlopenです(see Using libltdl).これは,libtoolライブラリを動的にロードするための移 植性の高いdlopenを提供し,やむをえないところではスタティックにリンクす ることも可能です.

我々がAutomakeを用いてlibtoolを使用する方法の詳細を議論する前に, libtoolマニュアルにあるlibtoolとともにAutomakeを使用する方法に付いて書 かれているセクションにも注意しておくべきです(see Using Automake with Libtool).