Provided by:
manpages-ja_0.5.0.0.20060115-1_all 
AUTOMAKE方
libtool ライブラリのサポートは、 LTLIBRARIES
プライマリのもとに実装されている。
プログラムを libtool ライブラリにリンクするためには、
ライブラリ名を指定する program_LDADD 変数を使うこと。 libtool に
-static といったオプションを渡すためには program_LDFLAGS を使うと良い。
libtool ライブラリをビルドするには、 ライブラリ名を指定する
lib_LTLIBRARIES を使うこと。libtool に -version-info
オプションを 渡すには lib_LDFLAGS を使うこと。
次のセクションに例がある。
作業をするためには、パッケージにいくつかの基本的なファイルを入れたり、
libtoolize を使う必要があるだろう。 libtool
スクリプトを直接インクルードしてはならない。
config.guess
標準システム名を推測しようとする。
config.sub
標準システム名を確認するサブルーチンスクリプト。
ltconfig
指示されたシステムについて libtool スクリプトを作成する。
ltmain.sh
基本的な libtool の機能を実装した一般的なスクリプト。
ド
libtool のダイナミックロード機能を使うためには、 configure.in のなかで
AM_PROG_LIBTOOL より前に マクロ AC_LIBTOOL_DLOPEN
を使わなければならない。 さもなければ、libtool はそのプラットホームには
ダイナミックロードのメカニズムがないと仮定して、
これをシミュレートしようとする。
このシミュレーション機能を使うためには、 実行ファイルをリンクするとい
-dlopen と -dlreopen フラグを使い、
ダイナミックロードするオブジェクトを宣言しなければならない。 libtool
はオブジェクトファイルをリンクし、
以下のような実行ファイルのシンボルテーブルを保持した
データ構造を作成する。
struct lt_dlsymlist { const char *NAME; lt_ptr_t ADDRESS; }
NAME には、"fprintf" のような、シンボル名のアスァ縞源列が保持される。
ADDRESS は、&fprintf のような、
適切なオブジェクトへのジェネリックポインタである。
const lt_dlsymlist * lt_preloaded_symbols;
この配列は実行ファイルにリンクされている
プリロードされたシンボルを表す。 -dlpreloaded
されたファイルのそれぞれについて要素が存在し、 ファイル名 NAME と `0'
というアドレス ADDRESS、
およびこのファイルからエクスポートされたすべてのシンボルを保持する。
実行ファイル自身については、特別な名前 @PROGRAM@ が使われる。
最後のエレメントは NAME と `0' という ADDRESS を持つ。
ダイナミックロードされるライブラリもしくは、
モジュールをダイナミックロードしようとする実行ファイルをリンクすると-
は、 -module フラグを指定するのを忘れないこと。
ダイナミックロードしようとしているライブラリの外部シンボルを、
実行ファイルが参照する必要がある場合は、実行ファイルをリンクするとい
-export-dynamic を使用すること。
ライブラリ名にバリエーションがあるので、
プログラムはどれがダイナミックロードするための
正しいファイルであるのかを決定する必要がある。 直接的な方法は `.la'
ファイルを調べて、
dlname='DLNAME' という行を探すことである。
この行はライブラリをダイナミックロードでい覆ぞ豺腓篭で、
そうでない場合はライブラリの名前が入っている。
例
ソースファイル `foo.c', `bar.c' から `libbaz'
とよばれるライブラリを作成し、 次に `a'
という名前の実行ファイルを作成するために `a.c' を `libbaz' と
リンクしようといる。
成
+o コンパイルモード:Linux は共優薀ぅ屮薀蠅鬟汽檗璽箸靴討い襪里如
libtool は 2 つのオブジェクトファイル、 一つは静的ライブラリ
(`foo.lo')、 もう一つは共優薀ぅ屮薀 (`foo.o') を作成する。
ソースファイル自身へのリンクをコンパイラにやらせたくないので、 -c
オプションは必須である。
lightside:~% libtool cc -c foo.c
cc -c -fPIC -DPIC foo.c -o .libs/foo.lo
cc -c foo.c >/dev/null 2>&1
lightside:~% libtool cc -c bar.c
cc -c -fPIC -DPIC bar.c -o .libs/bar.lo
cc -c bar.c >/dev/null 2>&1
+o リンクモード、静的ライブラリのみをビルドする: 以前に作成された `.o'
というオブジェクトファイルを指定している。 -o オプションは必須である。
lightside:~% libtool cc -o libbaz.a foo.o bar.o
ar cru libbaz.a foo.o bar.o
ranlib libbaz.a
+o リンクモード、静的ライブラリと共優薀ぅ屮薀蠅鬟咼襯匹垢襦 `.lo'
というオブジェクトファイルを指定する。 必須オプションは、前と同じ -o と
ライブラリのインストールされるディレクトリを指示する -rpath である。
ライブラリは `.libs' ディレクトリに作成される。
lightside:~% libtool cc -o libbaz.la foo.lo bar.lo \
-rpath /usr/local/lib
cc -shared -Wl,-soname -Wl,libbaz.so.0 \
-o .libs/libbaz.so.0.0.0 foo.lo bar.lo
(cd .libs && ln -s libbaz.so.0.0.0 libbaz.so.0)
(cd .libs && ln -s libbaz.so.0.0.0 libbaz.so)
ar cru .libs/libbaz.a foo.o bar.o
ranlib .libs/libbaz.a
creating libbaz.la
(cd .libs && ln -s ../libbaz.la libbaz.la)
+o インストールモード:ライブラリを指定したパス (この場合は
`/usr/local/lib') にインストールするために 必要なコマンドを実行する。
このモードでは共優薀ぅ屮薀 (`.so') と静的ライブラリ (`.a') を
インストールするとともに、アンインストールと情報提供の目的で libtool
ファイル (`.la') がインストールされる。
このモードはふつう特権ユーザーとして実行されるので、 -n または
--dry-run オプションを 指定して結果をチェックしておくとよい。
lightside:/tmp% libtool -n install libbaz.la /usr/local/lib
install .libs/libbaz.so.0.0.0 /usr/local/lib/libbaz.so.0.0.0
(cd /usr/local/lib && ln -s libbaz.so.0.0.0 libbaz.so.0)
(cd /usr/local/lib && ln -s libbaz.so.0.0.0 libbaz.so)
install libbaz.la /usr/local/lib/libbaz.la
install .libs/libbaz.a /usr/local/lib/libbaz.a
ranlib /usr/local/lib/libbaz.a
chmod 644 /usr/local/lib/libbaz.a
成
最初に `a.c' をコンパイルする
cc -c a.c
ライブラリが既にインストールされている場合には、
普段のように続行することがでい
cc a.c -lbaz -L/usr/local/lib
ライブラリがまだインストールされていない場合は、
実行ファイルのリンク・デバッグ・インストールに libtool
を使用しなければならない
(一度ライブラリがインストールされるまで、これはつづく)。
実際の実行ファイルはインストールされるまで `.libs' 内にあり、
作業ディレクトリにある実行ファイルは単なるラッパーであることに注意すること。
曖昧さを避けるため、絶対に -l と -L を使ってアンインストールされた 共-
ライブラリにリンクしてはならない。 `.la'
ファイルへのパスだけを指定すること。 以下の (`-lm')
でわかるように、インストール済みのライブラリは問題ではない。
lightside:~% libtool cc a.o libbaz.la -o a -lm
cc a.o -Wl,--rpath -Wl,/usr/local/lib \
.libs/libbaz.so -o .libs/a -lm
lightside:~% libtool gdb a
[複雑なデバッグのセッションは省略]
lightside:~% libtool install -c a /usr/local/bin/a
install -c .libs/a /usr/local/bin/a
Makefile.am成
+o 最初に簡単な configure.in を作成し、 automake と libtool
のためのマクロを忘れずに追加する。
AC_DEFUN(AM_INIT_AUTOMAKE)
AC_INIT(a.c)
AM_INIT_AUTOMAKE(a, 1.0)
AC_PROG_CC
AM_PROG_LIBTOOL
AC_OUTPUT(Makefile)
+o 対応する Makefile.am
# ライブラリのビルド
lib_LTLIBRARIES=libbaz.la
libbaz_la_SOURCES = foo.c bar.c
libbaz_la_LDFLAGS = -version-info 0:0:0
bin_PROGRAMS = a a.debug
# a.c と libbaz.la から a をビルド
a_SOURCES = a.c
a_LDADD = libbaz.la
# 静的デバッグバージョンを作成
a_debug_SOURCES = a.c
a_debug_LDADD = libbaz.la
a_debug_LDFLAGS = -static
+o そして最後に実行する
lightside:~% aclocal; libtoolize; automake --add-missing; autoconf
lightside:~% ./configure; make
目
libtoolize(1), libltdl(3)
意
プログラムのバグについては <bug-libtool@gnu.org> へ報告してください。
この man ページは Ragnar Hojland Espinosa <ragnar@ragnar-hojland.com>
が作成しました。