4.2 リンクモード
リンクモードは,(ライブラリオブジェクトを含む)オブジェクトファイ
ルと,その他のライブラリや作成された実行可能なプログラムをリンクします.
mode-argsは,いくつかのオブジェクトファイルから(‘-o’フラグ
を用いた)出力ファイルを作成するためにCコンパイラが使用するコマンドから
成り立ちます.
以下のmode-argsの組は特別に扱われます.
- ‘-all-static’
-
output-fileがプログラムの場合,共有ライブラリと全くリンクしませ
ん.output-fileがライブラリの場合,スタティックライブラリのみ作
成します.
- ‘-avoid-version’
-
ライブラリとモジュールに対しバージョン管理(see Versioning)を避けよ
うとし,すなわち,バージョン情報は保存されず,シンボリックリンクも作成
されません.プラットフォームがバージョニングを要求する場合,このオプショ
ンは効果がありません.
- ‘-dlopen file’
-
ネイティブなdlopenがホストプラットフォームでサポートされていない場合
(see Dlopened modules)や,プログラムが‘-static’や
‘-all-static’でリンクされている場合,‘-dlpreopen file’
と同じです.それ以外では効果はありません.fileが
self
の場
合,-export-dynamic
を可能にする,または,‘-dlpreopen self’
に後退することにより,libtoolはプログラムがそれ自身をdlopen
可能
であることを確かめます.
- ‘-dlpreopen file’
-
fileを出力プログラムにリンクし,そのシンボルを
lt_preloaded_symbolsに含めます(see Dlpreopening).file
が
self
の場合,プログラムのシンボル自身が
lt_preloaded_symbols に加えられます.fileがforce
の
場合,libtoolは,lt_preloaded_symbolsが空であろうがなかろうが,
常に定義済であることを確実にします.
- ‘-export-dynamic’
-
output-fileからのシンボルが
dlsym
で解決されることを可能に
します(see Dlopened modules).
- ‘-export-symbols symfile’
-
リンカにsymfileでリストアップされているシンボルのみエクスポート
するよう伝えます.シンボルファイルは‘.sym’で終わるべきで,一行ご
とに一シンボル名を含める必要があります.このオプションに効果がないプラッ
トフォームがあります.デフォルトですべてのシンボルがエクスポートされま
す.
- ‘-export-symbols-regex regex’
-
正規表現regexに一致するシンボルのみエクスポートされる以外,
‘-export-symbols’と同じです.デフォルトですべてのシンボルがエクス
ポートされます.
- ‘-Llibdir’
-
既にインストールされている,要求されているライブラリに対し,
libdirを検索します.
- ‘-lname’
-
output-fileはインストールされているライブラリ
libnameを要求します.このオプションはoutput-fileが
実行形式でないときも要求されます.
- ‘-module’
-
dlopen可能なライブラリを作成します(see Dlopened modules).このオプ
ションはプログラムでは動作しません.モジュール名の'lib'の前置は不要で
す.しかし,名前の破壊を避けるため,'libname'と'name' パッケージで同時
に使用してはなりません.
- ‘-no-fast-install’
-
実行形式output-fileの高速インストールモードを利用不可にします.
プログラムをインストールする必要がないとき役に立ちます.
- ‘-no-install’
-
インストール不可能で,そのためラップスクリプトが不要な実行形式
output-fileをリンクします.プログラムがビルドツリーでのみ使用さ
れる場合,例えば,テストしたり他のファイルを生成するプログラムに対して
役に立ちます.
- ‘-no-undefined’
-
output-fileが他のライブラリに依存しないことを宣言します.他のラ
イブラリに依存する共有ライブラリを作成不可能なプラットフォームもありま
す(see Inter-library dependencies).
- ‘-o output-file’
-
指定されたオブジェクトとライブラリからoutput-fileを作成します.
- ‘-release release’
-
ユーザが他より新しいバージョンを簡単に伝えられるよう,パッケージのリリー
スreleaseで生成されたライブラリを指定します.このフラグを使用す
る場合,パッケージの二つのリリースがバイナリ互換でないことを警告されま
す.バイナリ互換が欲しい場合,代わりに‘-version-info’フラグを使用
してください(see Versioning).
- ‘-rpath libdir’
-
output-fileがlibtoolライブラリの場合,それをビルドするために,バー
ジョン情報current,revision,そしてageを使用します
(see Versioning).このフラグをパッケージのリリース情報の指定に使用
せず,そのためには‘-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ライブラリの場合,それをビルドするために,バー
ジョン情報current,revision,そしてageを使用します
(see Versioning).このフラグをパッケージのリリース情報の指定に使用
せず,そのためには‘-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 Inter-library dependencies).
output-fileが‘.a’で終わる場合,標準的なライブラリは
ar
と,おそらくranlib
を使用して作成されます.
output-fileが‘.o’や‘.lo’で終わる場合,リロード可能なオ
ブジェクトファイルは,(通常‘ld -r’を用いて)入力ファイルから作成さ
れます.この手法は部分的なリンクと呼ばれることが多いです.
それ以外の場合,実行可能なプログラムが作成されます.