libtoolの呼び出し
[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

4. libtoolの呼び出し

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=libtool-ja&node=Invoking+libtool"
"libtool/libtoolの呼び出し"へのコメント(無し)

libtoolプログラムは以下の構文になります.

 
libtool [option]... [mode-arg]...

そして,以下のオプションを受け入れます.

`--config'
libtoolのコンフィグレーション変数を表示し終了します.

`--debug'
シェルスクリプトの実行の追跡を標準出力にダンプします.これは多くの出力 を生成するので,less(やmore)にパイプしたり,ファイルにリ ダイレクトしたいかもしれません.

`-n'
`--dry-run'
あらゆるファイルを作成,編集,削除せず,libtoolで実行されるコマンドの みを表示します.

`--features'
基本的なコンフィグレーションオプションを表示します.これは,パッケージ がビルドするライブラリを,スタティックまたは共有のいずれにするか決定す る方法を提供します.

`--preserve-dup-deps'
ライブラリ内で重複する依存性を削除しません.スタティックライブラリを用 いたパッケージのビルド時に,ライブラリはお互いに回忌的に依存する可能性 があるので(共有ライブラリもそうですが,それらは問題ありません),その状 況では,`-la -lb -la'が要求されるところで,二番目の`-la' を取り除いてはならず,さもないとリンクは失敗するでしょう.これらの重複 が必要な状況では,このオプションはそれらを保持し,libtoolが安全だと分 かっているライブラリだけを取り除きます.

`--finish'
`--mode=finish'と同じです.

`--help'
へルプメッセージを表示し終了します.`--mode=mode'が指定され た場合,modeの詳細へルプを表示します.

`--mode=mode'
処理モードとしてmodeを使用します.デフォルトで,処理モードは mode-argsから推測されます.推測不可能な状況があまりに多いので, modeを指定しないことは,現在では推奨されていません.将来の libtoolのバージョンでは,modeを明示的に設定することを要求するよ うになるでしょう.

modeは以下の一つに設定する必要があります.

`compile'
ソースファイルをlibtoolオブジェクトにコンパイルします.

`execute'
インストールされていない,libtoolが生成したプログラムやライブラリを他 のプログラムが使用できるように,自動的にライブラリパスを設定します.

`finish'
libtoolライブラリのシステムへのインストールを完全に行います.

`install'
ライブラリや実行形式をインストールします.

`link'
ライブラリや実行形式を作成します.

`uninstall'
インストールされたライブラリや実行形式を削除します.

`clean'
アンインストールされたライブラリや実行形式を削除します.

`--version'
ibtoolのバージョン情報を出力し終了します.

mode-argsは引数の変数の数で,それは処理モードの選択に依存します. 一般的に,それぞれのmode-argは,libtool自身ではなく,libtoolが呼 び出すプログラムで解釈されます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

4.1 コンパイルモード

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=libtool-ja&node=Compile+mode"
"libtool/コンパイルモード"へのコメント(無し)

コンパイルモードに対し,mode-argsは,`標準的な'オブジェク トファイルを作成するとき使用するコンパイルコマンドです.これらの引数は, Cコンパイラの名前で始まり,オブジェクトファイルのみを作成するための `-c'コンパイラフラグが含まれます.

libtoolは,ソースファイル名からディレクトリ要素を削除して出力ファイル 名を決定し,ソースコードの接尾子(例えば,Cソースコードに対する `.c')をライブラリオブジェクト接尾子`.lo'に置換します.

共有ライブラリをビルドする場合は,必要なPIC生成フラグがコンパイルコマ ンドに置換されます.`-XCClinker flag'を使用したり,リンカフ ラグ`-Wl,flag'と`-Xlinker flag'を渡すことで,リ ンク指定のフラグをコンパイラドライバに渡すことが可能です.また, `-Wc,flag'と`-Xcompiler flag'を使用することで, コンパイル指定のフラグを渡すことも可能です.

`-static'オプションが与えられている場合は,libtoolが `--disable-static'でコンフィグレーションされていた場合でも, `.o'ファイルがビルされてます.

現在は`-o'オプションが,完全にサポートされていることに注意してく ださい.それがサポートされていないプラットフォームでは,(オブジェクト のロックと移動によって)エミュレートされるので,Makefileを少し編集する だけでlibtoolは本当に簡単に使用できます.入力例は以下のようになります.

 
libtool gcc -c foo/x.c -o foo/x.lo
will do what you expect.

しかし,コンパイラが`-c'と`-o'をサポートしていない場合,既存 の`./x.o'を上書きせずに`foo/x.c'をコンパイルすることが不可能 なことに注意してください.そのため,ソースファイル`./x.c'がある場 合,`./x.o'(や`./x.lo')が,サブディレクトリのあらゆる `x.lo'の後で再作成されることを確実にするため,`Makefile'に依 存性の導入を必ず行ってください.

 
x.o x.lo: foo/x.lo bar/x.lo
これは,プログラムやライブラリを作成するため,一時的に壊れた`x.o' の使用を試みないことを確実にします.それは,`-c'と`-o'を同時 にサポートするプラットフォームで,不必要な再コンパイルを引き起こすかも しれませんが,それは,そうでないものに対して安全にする唯一の方法です.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

4.2 リンクモード

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=libtool-ja&node=Link+mode"
"libtool/リンクモード"へのコメント(無し)

リンクモードは,(ライブラリオブジェクトを含む)オブジェクトファイ ルと,その他のライブラリや作成された実行可能なプログラムをリンクします.

mode-argsは,いくつかのオブジェクトファイルから(`-o'フラグ を用いた)出力ファイルを作成するためにCコンパイラが使用するコマンドから 成り立ちます.

以下のmode-argsの組は特別に扱われます.

`-all-static'
output-fileがプログラムの場合,共有ライブラリと全くリンクしませ ん.output-fileがライブラリの場合,スタティックライブラリのみ作 成します.

`-avoid-version'
ライブラリとモジュールに対しバージョン管理(see 節 6. ライブラリインターフェースのバージョン)を避けよ うとし,すなわち,バージョン情報は保存されず,シンボリックリンクも作成 されません.プラットフォームがバージョニングを要求する場合,このオプショ ンは効果がありません.

`-dlopen file'
ネイティブなdlopenがホストプラットフォームでサポートされていない場合 (see 節 9. dlopenモジュール)や,プログラムが`-static'や `-all-static'でリンクされている場合,`-dlpreopen file' と同じです.それ以外では効果はありません.fileselfの場 合,-export-dynamicを可能にする,または,`-dlpreopen self' に後退することにより,libtoolはプログラムがそれ自身をdlopen可能 であることを確かめます.

`-dlpreopen file'
fileを出力プログラムにリンクし,そのシンボルを lt_preloaded_symbolsに含めます(see 節 9.2 dlopen).fileselfの場合,プログラムのシンボル自身が lt_preloaded_symbols に加えられます.fileforceの 場合,libtoolは,lt_preloaded_symbolsが空であろうがなかろうが, 常に定義済であることを確実にします.

`-export-dynamic'
output-fileからのシンボルがdlsymで解決されることを可能に します(see 節 9. dlopenモジュール).

`-export-symbols symfile'
リンカにsymfileでリストアップされているシンボルのみエクスポート するよう伝えます.シンボルファイルは`.sym'で終わるべきで,一行ご とに一シンボル名を含める必要があります.このオプションに効果がないプラッ トフォームがあります.デフォルトですべてのシンボルがエクスポートされま す.

`-export-symbols-regex regex'
正規表現regexに一致するシンボルのみエクスポートされる以外, `-export-symbols'と同じです.デフォルトですべてのシンボルがエクス ポートされます.

`-Llibdir'
既にインストールされている,要求されているライブラリに対し, libdirを検索します.

`-lname'
output-fileはインストールされているライブラリ `libname'を要求します.このオプションはoutput-fileが 実行形式でないときも要求されます.

`-module'
dlopen可能なライブラリを作成します(see 節 9. dlopenモジュール).このオプ ションはプログラムでは動作しません.モジュール名の'lib'の前置は不要で す.しかし,名前の破壊を避けるため,'libname'と'name' パッケージで同時 に使用してはなりません.

`-no-fast-install'
実行形式output-fileの高速インストールモードを利用不可にします. プログラムをインストールする必要がないとき役に立ちます.

`-no-install'
インストール不可能で,そのためラップスクリプトが不要な実行形式 output-fileをリンクします.プログラムがビルドツリーでのみ使用さ れる場合,例えば,テストしたり他のファイルを生成するプログラムに対して 役に立ちます.

`-no-undefined'
output-fileが他のライブラリに依存しないことを宣言します.他のラ イブラリに依存する共有ライブラリを作成不可能なプラットフォームもありま す(see 節 8. ライブラリ内部の依存性).

`-o output-file'
指定されたオブジェクトとライブラリからoutput-fileを作成します.

`-release release'
ユーザが他より新しいバージョンを簡単に伝えられるよう,パッケージのリリー スreleaseで生成されたライブラリを指定します.このフラグを使用す る場合,パッケージの二つのリリースがバイナリ互換でないことを警告されま す.バイナリ互換が欲しい場合,代わりに`-version-info'フラグを使用 してください(see 節 6. ライブラリインターフェースのバージョン).

`-rpath libdir'
output-fileがlibtoolライブラリの場合,それをビルドするために,バー ジョン情報currentrevision,そしてageを使用します (see 節 6. ライブラリインターフェースのバージョン).このフラグをパッケージのリリース情報の指定に使用 せず,そのためには`-release'を参照してください.

`-shrext suffix'
output-fileがlibtoolライブラリの場合,システム標準の共有ライブラ リに対するファイル名の拡張子をsuffixに置換します(ほとんどのシス テムでは,これに`.so'を使用します).このオプションは,アプリケー ションが要求する共有ライブラリ(一般的にはモジュール)の拡張子が,デフォ ルトのものではない状況で役に立ちます.前置するドットを含めた完全なファ イル名の拡張子を提供する必要があることに注意してください.

`-R libdir'
output-fileがプログラムの場合,プログラムの実行時のパスを libdirに加えます.output-fileがライブラリの場合,ライブラ リがプログラムとリンクされるときは,常にlibdirが実行時のパスに加 えられるように,そのdependency_libsに-Rlibdirを加えます.

`-static'
output-fileがプログラムの場合,インストールされていない共有ライ ブラリとリンクしません.output-fileがライブラリの場合,スタティッ クライブラリのみ作成します.

`-version-info current[:revision[:age]]'
output-fileがlibtoolライブラリの場合,それをビルドするために,バー ジョン情報currentrevision,そしてageを使用します (see 節 6. ライブラリインターフェースのバージョン).このフラグをパッケージのリリース情報の指定に使用 せず,そのためには`-release'を参照してください.

`-version-number major[:minor[:revision]]'
output-fileがlibtoolライブラリの場合,結果として得られるライブラ リが使用する指定されたメジャー,マイナーそしてリビジョンナンバーを使用 するように,インターフェースバージョンの情報を計算します.これは,特定 のバージョンナンバーがすでにオペレーティングシステムで使用されている既 存のプロジェクトで,libtoolが使用できるように設計されています.新しい プロジェクトでは,代わりに`-version-info'フラグを使用すべきです.

`-Wl,flag'
`-Xlinker flag'
リンカ指定のフラグを直接リンカに渡します.

`-XCClinker flag'
リンク指定フラグをコンパイラドライバ(CC)にリンク時に渡します.

output-fileが`.la'で終わる場合,libtoolライブラリが作成され, それはライブラリオブジェクト(`.lo'ファイル)のみから作成される必要 があります.`-rpath'オプションは要求されません.現在の実装では, libtoolライブラリが他のインストールされていないlibtoolライブラリに依存 することはできません(see 節 8. ライブラリ内部の依存性).

output-fileが`.a'で終わる場合,標準的なライブラリは arと,おそらくranlibを使用して作成されます.

output-fileが`.o'や`.lo'で終わる場合,リロード可能なオ ブジェクトファイルは,(通常`ld -r'を用いて)入力ファイルから作成さ れます.この手法は部分的なリンクと呼ばれることが多いです.

それ以外の場合,実行可能なプログラムが作成されます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

4.3 実行モード

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=libtool-ja&node=Execute+mode"
"libtool/実行モード"へのコメント(無し)

`実行'モードに対し,ライブラリパスは自動的に設定され,プログラム は実行されます.

mode-argsの最初は,プログラム名として扱われ,残りはプログラムの 引数となります.

以下のmode-argsの組は特別に扱われます.

`-dlopen file'
ライブラリパスにfileを含むディレクトリを加えます.

このモードは,あらゆる`-dlopen'フラグによって,ライブラリパス環境 変数を設定します.

すべてのargsがlibtoolの実行形式のラッパーの場合,それらは対応す るインストールされていないバイナリの名前に変換され,それらが要求するす べてのライブラリディレクトリがライブラリパスに加えられます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

4.4 インストールモード

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=libtool-ja&node=Install+mode"
"libtool/インストールモード"へのコメント(無し)

インストールモードでは,libtoolはmode-argsのほとんどの要素 を,cpで始まるインストールコマンドやBSD互換のinstallプロ グラムとして解釈します.

mode-argsの残りは,特別扱いされます.

`-inst-prefix inst-prefix-dir'
最終的なprefixではなく一時的な保存領域にインストールするとき,こ の引数は一時的なパスを反映するために使用し,それはautomakeDESTDIRを使用する方法とほとんど同じです.例えば,prefix/usr/localinst-prefix-dir/tmpの場合,オブジェ クトは/tmp/usr/local/にインストールされます.インストールされた オブジェクトがlibtoolライブラリの場合,ライブラリの内部フィールドは inst-prefix-dirではなくprefixだけに反映されます.

 
# Directory that this library needs to be installed in:
libdir='/usr/local/lib'

以下ではありません.

 
# Directory that this library needs to be installed in:
libdir='/tmp/usr/local/lib'

inst-prefixは,インストールされたオブジェクトがインストール時に 再リンクする必要がある場合にも,それがprefixではなく inst-prefix-dir/prefixのライブラリと再リンクするのを確実に するためにも使用されます.

実際は,このオプションはlibtoolで直接呼び出すときに使用することが本当 の目的ではありません.それはlibtool --mode=installlibtool --mode=relinkを呼び出すとき自動的に使用されます. libtoolは元々のlibtool --mode=installコマンドで与えられたインス トール先のパスを解析し,libtool --mode=linkで確定した予測される インストールパスと比較することで,これを行ないます.

このため,エンドユーザは変更する必要はなく,automake形式の make install DESTDIR=/tmpでJust Work(tm) (うまく動作します)にな ります.

残りのmode-argsは,cpinstallコマンドの引数として 解釈されます.

コマンドが実行され,特権の不要な必要なインストール後のコマンドも完全に 実行されます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

4.5 フィニッシュモード

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=libtool-ja&node=Finish+mode"
"libtool/フィニッシュモード"へのコメント(無し)

フィニッシュモードは,ユーザプログラムにlibtoolライブラリを配置し リンクできるよう,システム管理者のインストールを助けます.

それぞれのmode-argはライブラリのディレクトリの名前として解釈され ます.このコマンドの実行は,`--dry-run'オプションが役に立つように, スーパーユーザの特権を要求するかもしれません.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

4.6 アンインストールモード

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=libtool-ja&node=Uninstall+mode"
"libtool/アンインストールモード"へのコメント(無し)

アンインストールモードはインストールされているライブラリ,実行形 式,そしてオブジェクトを削除します.

mode-argの最初はファイルの削除に使用するプログラム名(通常は `/bin/rm')です.

残りのmode-argsは,(`-'で始まる)削除プログラムに対するフラグ,ま たは削除するファイル名です.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

4.7 クリーンモード

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=libtool-ja&node=Clean+mode"
"libtool/クリーンモード"へのコメント(無し)

クリーンモードはアンインストールされたライブラリ,実行形式,オブ ジェクト,そして,それらに関連があるlibtoolの一時ファイルを削除します.

最初のmode-argは,ファイルを削除するために使用するプログラムの名 前(通常は`/bin/rm')です.

残りのmode-argsは削除プログラムに対する(`-'で始まる)フラグ,また は削除するファイル名です.


[ << ] [ >> ]           [表紙] [目次] [索引] [検索] [上端 / 下端] [?]