[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

8. ライブラリ内部の依存

定義では,すべての共有ライブラリシステムは,シンボル解決が実行時まで延期 されるように,実行形式をライブラリに依存させる方法を提供します.

ライブラリ内部の依存性は,他のライブラリに依存するライブラリにあり ます.例えば,libtoolライブラリ`libhello'がcos関数を使用する 場合,それは`libm'に対するライブラリ内部の依存性があり,数学ライブ ラリがcosを実装しています.

共有ライブラリシステムには,内部で一貫した方法で,この機能を提供するもの もあります.これらのシステムは,潜在的に無限長の依存性の連鎖を認めます.

しかし,ほとんどの共有ライブラリのシステムは,単一レベルの依存のみを認め るという制限があります.これらのシステムでは,プログラムは共有ライブラリ に依存しますが,共有ライブラリは他の共有ライブラリに依存しません.

あらゆる事象で,ライブラリ内部の依存性を宣言するため,libtoolは単純なメ カニズムを提供します.独自のライブラリに依存するすべてのライブラリ `libname'に対しライブラリを作成するとき,対応する -lnameオプションをリンク行に単純に加えます.`libm'に依 存する`libhello'の例をビルドしてみます.

 
burger$ libtool gcc -g -O -o libhello.la foo.lo hello.lo \
                -rpath /usr/local/lib -lm
burger$

プログラムを`libhello'に対しリンクするとき,`-l'オプションを再 び指定する必要はありません.必要なライブラリがすべて見つかることを保証す るため,libtoolがそれを行います.この制約は,静的なライブラリシステムと, 単純な動的ライブラリシステムとの互換性を保つために必要です.

AIXのように,この柔軟性さえ許可されないプラットフォームもあります.共有 ライブラリをビルドするため,それは完全に自己内蔵型である必要があり(すな わち,`.lo'ファイルや`-l'で指定されたライブラリでシンボルが見 つかるもののみを参照する),-no-undefinedフラグを指定する必要があり ます.デフォルトで,libtoolはこの種のプラットフォームではスタティックラ イブラリのみをビルドします.

1.2以前のlibtoolのリリースのコードにおける,単純に考えられたライブラリ内 部の依存性の追跡は,ライブラリを他のライブラリとリンクすることが可能なと きが明白でないため,それが利用ができず,複雑な異常終了が発生します.この 概念のより複雑な実装は,リリース1.3の前に再導入されましたが,libtoolがサ ポートするすべてのプラットフォームに移植されませんでした.デフォルトで, 保守的な動作は,ライブラリが他のライブラリとリンクすることを避け,プログ ラムがリンクされるときのみに,その内部依存性が導入されます.


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Akihiro Sagawa on June, 15 2005 using texi2html 1.70.