File: libtool.1

package info (click to toggle)
manpages-ja 0.5.0.0.20120606-1
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 25,964 kB
  • sloc: perl: 161; makefile: 116
file content (708 lines) | stat: -rw-r--r-- 30,843 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
.\" You may copy, distribute and modify under the terms of the LDP General
.\" Public License as specified in the LICENSE file that comes with the
.\" gnumaniak distribution
.\"
.\" The author kindly requests that no comments regarding the "better"
.\" suitability or up-to-date notices of any info documentation alternative
.\" is added without contacting him first.
.\"
.\" (C) 1999-2002 Ragnar Hojland Espinosa <ragnar@ragnar-hojland.com>
.\"
.\"	libtool man page
.\"	man pages are NOT obsolete!
.\"	<ragnar@ragnar-hojland.com>
.\"
.\" Japanese Version Copyright (c) 2000-2003 Yuichi SATO
.\"         all rights reserved.                                               
.\" Translated Mon Jun  5 02:20:58 JST 2000
.\"         by Yuichi SATO <sato@complex.eng.hokudai.ac.jp>
.\" Updated & Modified Sat Mar  1 23:41:22 JST 2003
.\"         by Yuichi SATO <ysato444@yahoo.co.jp>
.\"
.\"WORD:	build			ビルド
.\"WORD:	compiler		コンパイラー
.\"WORD:	canonical		標準
.\"WORD:	executable		実行ファイル
.\"WORD:	design			設計
.\"WORD:	dlopen			ダイナミックロード
.\"WORD:	dlopening support	ダイナミックロード機能
.\"WORD:	global			大域
.\"WORD:	library			ライブラリ
.\"WORD:	shared			共有
.\"WORD:	static			静的
.\"WORD:	partial linking		部分リンク
.\"
.TH LIBTOOL 301 "June 2002" "libtool 1.4.2"
.SH 名前
\fBlibtool\fR \- ライブラリのコンパイル・ビルド・
インストール・アンインストールをする
.SH 書式
.B libtool
.RB [ \-n ]
.RB [ \-\-config ]
.RB [ \-\-debug ]
.RB [ \-\-dry\-run ]
.RB [ \-\-features ]
.RB [ \-\-finish ]
.RB [ \-\-mode=\fIMODE ]
.RB [ \-\-quiet ] 
.RB [ \-\-silent ]
.RI [ MODE\-ARGS... ]

リンクモード: [\fB\-l\fINAME\fR] [\fB\-o \fI OUTPUT\-FILE\fR] [\fB\-L\fILIBDIR\fR]
[\fB\-R \fILIBDIR\fR]
.RB [ \-all\-static ]
.RB [ \-avoid\-version ]
.RB [ "\-dlopen \fIFILE" ]
.RB [ "\-dlpreopen \fIFILE" ]
.RB [ \-export\-dynamic ]
.RB [ "\-\-export\-symbols \fIFILE" ]
.RB [ "\-\-export\-symbols \fIREGEX" ]
.RB [ \-\-module ]
.RB [ \-no\-undefined ]
.RB [ "\-release \fIRELEASE" ]
.RB [ "\-rpath \fILIBDIR" ]
.RB [ \-static ]
.RB [ "\-version\-info \fICURRENT\fR[\fB:\fIREVISION\fR[\fB:\fIAGE" ]]

実行モード: [\fB\-dlopen \fIFILE\fR]

.BR libtool " [" \-\-features "] [" \-\-help "] [" \-\-version ]
.SH 説明
.B libtool
は静的ライブラリや共有ライブラリの
コンパイル・リンク・インストール・アンインストールの複雑さを簡略化する。
異なるプラットフォームそれぞれで、完全な機能を
統一的なインターフェースを介して使用することができ、
プラットフォーム固有の厄介な癖はプログラマーから隠蔽される。

.B libtool
はコンパイル・実行・リンク・フィニッシュ・インストール・アンインストール
という 6 つのモードで動作できる。
.SS コンパイルモード
\fBコンパイル\fRモードの場合、\fIMODE\-ARGS\fR は
標準的なオブジェクトファイルを作成するために使われる
コンパイラコマンドである。
これらの引き数は C コンパイラの名前で始まり、
オブジェクトファイルのみを作成するよう、
\fB\-c\fR コンパイラフラグを含んでいなければならない。

\fBlibtool\fR は出力ファイルの名前を決定するとき、
ソースファイル名からディレクトリ構成要素を取り除き、
それから C 言語のソースコードの拡張子 `.c' をライブラリオブジェクトの
拡張子 `.lo' に置き換えるという方法を用いる。

共有ライブラリがビルドされる場合、必要な PIC 作成フラグすべてが
コンパイルコマンドに挿入される。
\fB\-static\fR オプションを指定すると、たとえ \fB\-\-disable\-static\fR が
設定されていたとしても、\fBlibtool\fR は `.o' ファイルを作成する。
 
\fB\-o\fR オプションが直接サポートされていないプラットフォーム上では
(コンパイラによって作成されたオブジェクトファイルのロックと移動により)
エミュレートを行う。
したがって、以下のような通常の構文を使うことができる。
.sp
.RS
.nf
lightside:% libtool cc -c foo/x.c -o foo/x.lo
.fi
.RE
.sp
プラットフォームが \fB\-c\fR と \fB\-o\fR オプションをサポートしていない場合、
古い `foo/x.o' を上書きせずに `foo/x.lo' をビルドすることはできない。
この場合、`foo/x.o' が `foo/x.lo' の後に (再) ビルドされることを
確かめておかなければならない。

.SS リンクモード
\fBリンク\fRモードはライブラリや実行可能プログラムを作成するために、
オブジェクトファイル (ライブラリオブジェクトも含む) をリンクする。

\fIMODE\-ARGS\fR は、C コンパイラがオブジェクトファイルから
(\fB\-o\fR フラグにより) 出力ファイル \fIOUTPUT\-FILE\fR を作成する
ときに使用するコマンドで構成される。
以下のように、ファイルの形式は \fIOUTPUT\-FILE\fR の拡張子に依存する。
.TP
.B .la
libtool ライブラリを作成する。
このライブラリはライブラリオブジェクト (`.lo' ファイル) 
のみからビルドされなければならない。
\fB\-rpath\fR オプションが必要である。
現在の実装では、libtool ライブラリはアンインストールされた他の
libtool ライブラリに依存できない。
.TP
.B .a
\fBar\fR(1) と (あるいは) \fBranlib\fR(1) を使って
標準ライブラリが作成される。
.TP
.B .o .lo
(一般には `ld \-r' を使うことで) 入力ファイルから
再ロード可能なオブジェクトファイルが作成される。
この手法は ``部分リンク'' と呼ばれることが多い。
.TP
.B other
実行可能なプログラムが作成される。
.SS 実行モード
\fB実行\fRモードでは、ライブラリパスの環境変数が自動的にセットされ
(そして \fB\-dlopen\fR によって修正されて)、プログラムが実行される。

一番目の \fIMODE-ARGS\fR はプログラム名として扱われ、
残りはプログラムの引数として扱われる。

引数の中のどれかが libtool 実行ファイルのラッパーであった場合、
その引数はそれぞれ対応するアンインストール済みバイナリの名前に変換される。
このとき、必要とされるライブラリディレクトリがライブラリパスに加えられる。
.SS インストールモード
\fBインストール\fRモードでは、\fIMODE\-ARGS\fR を
\fBcp\fR(1) もしくは BSD-互換の \fBinstall\fR(1) から始まる
インストールコマンドとして解釈する。

残りの \fBMODE\-ARGS\fR は、インストールコマンドの
引数として解釈される。

このコマンドは実行され、
インストール後の処理に必要な非特権コマンドもすべて完了する。
.SS フィニッシュモード
\fBフィニッシュ\fRモードは、システム管理者の libtool ライブラリ
インストール作業を補助し、 libtool ライブラリの探索およびユーザー
プログラムへのリンクができるようにする。

\fIMODE\-ARG\fR はライブラリディレクトリ名として解釈される。
このコマンドを実行するのにはスーパーユーザー特権が必要なため、
\fB\-\-dry\-run\fR オプションを使うと便利だろう。
.SS アンインストールモード
このモードではインストールされたライブラリ (もしくはファイル) を削除する。

一番目の  \fIMODE\-ARG\fR はファイルを削除するためのプログラム名
(一般には `/bin/rm') である。

残りの \fIMODE\-ARGS\fR は削除プログラムの (`\-' で始まる) フラグもしくは、
削除するファイルの名前である。
.SH オプション
.SS グローバルオプション
.TP
.B \-\-config
libtool の設定変数を表示して終了する。
.TP
.B \-\-debug
シェルスクリプトのトレースモードを有効にして、標準出力に書き出す。
.TP
.B \-n, \-\-dry\-run
ファイルの作成・修正・削除を行わず、\fBlibtool\fR によってどのような
コマンドが実行されるかを表示する。
.TP
.B \-\-features
libtool の基本的な特徴を表示する。
また静的ライブラリと共有ライブラリが有効になっているかを表示する。
.TP
.B \-\-finish
\fB\-\-mode=finish\fR と同じ。
.TP
.B \-\-mode=\fIMODE
\fIMODE\fR をオペレーションモードとする。
デフォルトでは、オペレーションモードは \fIMODE\-ARGS\fR の内容から推論される。
\fIMODE\fR を指定する場合、次のうちの一つでなければならない。
.RS
.TP
.B compile
ソースファイルを libtool オブジェクトにコンパイルする。
.TP
.B execute
他のプログラムがアンインストールされたプログラムやライブラリ
(libtool により作成されたもの) を使うことができるように、
ライブラリパスを自動的に設定する。
.TP
.B finish
システムへの libtool ライブラリのインストールを完了する。
.TP
.B install
ライブラリや実行ファイルをインストールする。
.TP
.B link
ライブラリや実行ファイルを作成する。
.TP
.B uninstall
ライブラリや実行ファイルを削除する。
.RE
.TP
.B \-\-features
libtool の設定情報を表示して終了する。
このオプションを使うと、パッケージは共有ライブラリと静的ライブラリの
どちらを作るか決定できる。
.TP
.B "\-\-help"
使用法のメッセージを標準出力に表示して、正常終了する。
\fB\-\-mode=\fIMODE\fR が指定されている場合は、
指定されたモードについてのヘルプが表示される。
.TP
.B "\-\-version"
バージョン情報を標準出力に表示して、正常終了する。
.SS リンクモードオプション
.TP
.B -l\fINAME
\fIOUTPUT\-FILE\fR はインストール済みの
ライブラリ \fBlib\fINAME\fR を必要とする。
このオプションは \fIOUTPUT\-FILE\fR が実行ファイルでなくても必要とされる。
.TP
.B \-o \fIOUTPUT\-FILE
指定したオブジェクトとライブラリから \fIOUTPUT\-FILE\fR を作成する。
.TP
.B \-L\fILIBDIR
必要なインストール済みライブラリを \fILIBDIR\fR から検索する。
.TP
.B \-R \fILIBDIR
\fIOUTPUT\-FILE\fR が実行ファイルの場合は \fILIBDIR\fR を実行時パスに加える。
\fIOUTPUT\-FILE\fR がライブラリの場合は 
`-RLIBDIR' を \fBDEPENDENCY_LIBS\fR に加える。
これは、そのライブラリが実行ファイルにリンクされるときに必ず
\fILIBDIR\fR を実行ファイルの実行時パスに加えるためである。
.TP
.B \-all\-static
\fIOUTPUT\-FILE\fR がプログラムの場合は、
そのプログラムをどの共有ライブラリともリンクさせない。
\fIOUTPUT\-FILE\fR がライブラリの場合は静的ライブラリを作成するのみである。
.TP
.B \-avoid\-version
どのような種類のバージョニングも行わない
(バージョン情報は組み込まれず、シンボリックリンクも作られない)。
このオプションはバージョニングを必要とするプラットホーム上では働かない。
.TP
.B \-dlopen \fIFILE
ホストプラットホーム上でネイティブな
ダイナミックロードがサポートされていない場合や、
実行ファイルが \fB\-static\fR や \fB\-all\-static\fR を
使ってリンクされる場合は、\fB\-dlpreopen \fIFILE\fR と同じ。
それ以外の場合は何も影響を及ぼさない。

\fIFILE\fR が `実行ファイル自身' であった場合、
libtool は実行ファイルが \fB\-export\-dynamic\fR や
\fB\-dlpreopen\fR を使って自らを \fBdlopen\fR(3) できるかを確かめる。
.TP
.B \-dlpreopen \fIFILE
\fIFILE\fR を出力プログラムにリンクし、そのシンボルを
\fBLT_PRELOADED_SYMBOLS\fR に加える。

\fIFILE\fR が `出力プログラム自身' であった場合、
出力プログラム自身のシンボルが \fBLT_PRELOADED_SYMBOLS\fR に加えられる。
.TP
.B \-export\-dynamic
\fIOUTPUT\-FILE\fR のシンボルを \fBdlsym\fR(3) を使って解決できるようにする。
.TP
.B \-export\-symbols \fIFILE
これをサポートしているプラットホーム上では、
リンカは \fIFILE\fR にリストされているシンボルのみをエクスポートする。
\fIFILE\fR の名前は `.sym' で終っていなければならず、
1 行に 1 つのシンボルを含んでいなければならない。
デフォルトではすべてのシンボルがエクスポートされる。
.TP
.B \-export\-symbols\-regex \fIREGEX
\fIREGEX\fR \fBregex\fR(7) にマッチするシンボルのみがエクスポートされる以外は
\fB\-export\-symbols\fR と同じ。
.TP
.B \-module
ダイナミックロードできるライブラリを作成する。
モジュール名は `lib' で始まる必要はないが、
名前の衝突を避けるため `libname' と `name' はパッケージの中で
同時に使用すべきではない。
.TP
.B \-no\-undefined
\fIOUTPUT\-FILE\fR が他のライブラリに依存していないことを宣言する。
他のライブラリに依存する共有ライブラリを作れないプラットホームもある。
.TP
.B \-release \fIRELEASE
ライブラリがパッケージのリリース \fIRELEASE\fR で作られたことを指定する。
これによって、ユーザーはどのバージョンが他のものより新しいかを
簡単に判断できる。
このフラグを使うと、パッケージの各リリースのいかなるペアの間にも
バイナリ互換はなくなることに注意せよ。
バイナリ互換にしたい場合は、\fB\-version\-info\fR フラグを使うこと。
.TP
.B \-rpath \fILIBDIR
\fIOUTPUT\-FILE\fR がライブラリの場合、
最終的に \fILIBDIR\fR にインストールされる。
.TP
.B \-static
\fIOUTPUT\-FILE\fR がプログラムの場合、
アンインストールされた共有 libtool ライブラリはリンクしない。
\fIOUTPUT\-FILE\fR がライブラリの場合、
静的ライブラリを作成するのみである。
.TP
.B \-version\-info \fICURRENT\fR[\fB:\fIREVISION\fR[\fB:\fIAGE\fR]]
\fIOUTPUT\-FILE\fR が libtool ライブラリであるとき、
ライブラリをビルドするためにインターフェースバージョン情報
\fICURRENT\fR, \fIREVISION\fR, \fIAGE\fR を使う。
パッケージのリリース情報を指定するために、
このオプションを使っては\fBいけない\fR。
むしろ \fB\-release\fR フラグを参照すべきである。
.SS 実行モードオプション
.TP
.B \-dlopen \fIFILE
\fIFILE\fR を含んでいるディレクトリをライブラリパスに加える。
.SH バージョニング
.B libtool
は共有ライブラリ用に独自のバージョニングシステムを持っている。
このシステムを使いたい場合は、\fB\-version\-info\fR オプションを
使わなければならない。
このオプションは
\fICURRENT\fR[\fB:\fIREVISION\fR[\fB:\fIAGE\fR]]
という形式の引数を受け付ける。
.TP
.I CURRENT
インターフェースのバージョン。インターフェースとは
"外側" の世界に見えるすべてのもので、
変数・関数プロトタイプ・出力形式などである。
.TP
.I REVISION
\fICURRENT\fR からの相対値で与える実装のバージョン。
.TP
.I AGE
このライブラリが実装している最新のインターフェースと
最古のインターフェースとの違い。
言い替えると、このライブラリは `\fICURRENT \- \fIAGE\fR' から
\fICURRENT\fR までの範囲のすべてのインターフェース番号を実装していて、
このバージョンの範囲にあるライブラリに対して過去にリンクされた
すべての実行ファイルは、このライブラリを使うことができる、
ということである。
.PP
\fIREVISION\fR と \fIAGE\fR が省略された場合のデフォルトは 0 である。
\fIAGE\fR は \fICURRENT\fR インターフェース番号より小さいか
等しくなければならないことにも注意すること。
2 つのライブラリが同一の \fICURRENT\fR 番号と \fIAGE\fR 番号であるとき、
ダイナミックリンカは大きい \fIREVISION\fR 番号のライブラリを選択する。

バージョニングのガイドライン:

\fB\(bu\ 1.\fR それぞれの libtool ライブラリについて
`0:0:0' というバージョン情報から始めなさい。

\fB\(bu\ 2. \fR バージョン情報を更新するのは
ソフトウェアの公開リリースの直前だけにしなさい。
頻繁な更新は不必要であり、現在のインターフェース番号が大きくなるのを
早くするだけである。

\fB\(bu\ 3.\fR 前回の更新からライブラリのソースコードが
すっかり変更されたなら、\fIREVISION\fR を増加させなさい
(\fIC\fB:\fIR\fB:\fIA\fR が \fIC\fB:\fIR+1\fB:\fIA\fR になる)。

\fB\(bu\ 4.\fR 前回の更新からインターフェースが
追加・削除・変更されたなら、\fICURRENT\fR を増加させ、\fIREVISION\fR を
0 にしなさい。

\fB\(bu\ 5.\fR 前回の公開リリースからインターフェースが
追加されたなら、\fIAGE\fR を増加させなさい。

\fB\(bu\ 6.\fR 前回の公開リリースからインターフェースが
削除されたなら、\fIAGE\fR を 0 にしなさい。

パッケージバージョンをライブラリ名にエンコードしたい場合や、
\fBlibtool\fR のバージョニングと衝突せずに
他のバージョニングシステムを使いたい場合は、\fB\-release\fR を使うこと。
たとえば binutils\-2.7.0.2 に付属する `libbfd.so.2.7.0.2' は
\fBlibtool\fR のバージョニングと明らかに衝突する。
`\-release 2.7.0' を使えば `libbfd\-2.7.0.so.0.0.0' で終ることができる。

異なる \fICURRENT\fR バージョンのライブラリや
異なる \fB\-release\fR のライブラリはバイナリ非互換であろう。
.SH インターフェースの設計
良いライブラリインターフェースを書くには、
練習とライブラリが解決しようとしている問題に対する徹底的な理解が必要である。
良いインターフェースを設計すれば、
頻繁に変更する必要はなく、ドキュメントを更新し続ける必要もなく、
クライアントがライブラリの使い方を再び勉強し続ける必要もないだろう。

設計に対するガイドラインをいくつか示す:

\fB\(bu\fR 前もって計画を立てる
.br
エントリーポイントを頻繁に削除する必要がないように、
それぞれのインターフェースを最小にするようにしなさい。

\fB\(bu\fR インターフェースの変更を避ける
.br
もしインターフェースを再設計する必要があるならば、
クライアントが既に存在するコードを書き直す必要がないように、
互換性のある関数も残しておくようにしなさい。

\fB\(bu\fR 見えないデータタイプを使う
.br
クライアントがアクセスする必要のあるデータタイプの定義は少ない程良い。
可能ならば、関数がジェネリックポインタ
(内部データタイプにキャストすることが可能) を
受け付けるように設計しなさい。
クライアントに直接データを操作させるよりは、
アクセス関数を提供しなさい。
このようするとインターフェースを変更することなく
データ構造を自由に変更できる。

\fB\(bu\fR ヘッダファイルを使う
.br
それぞれのライブラリについて大域関数・大域変数をヘッダファイルに書いて
ライブラリのソースファイルにインクルードしておけば、
気づかずにインターフェースの変更をしてしまっても
コンパイラが知らせてくれるだろう。

\fB\(bu\fR 可能なときはいつでも\fB静的\fR (もしくは等価なもの) を使う
.br
ライブラリに大域関数が少ないほど、ライブラリは柔軟に変更できる。
\fB静的な\fR関数・変数は、クライアントがアクセスできないから
インターフェースの変更とはならないので、好きなだけ変更することができる。
.SH AUTOMAKE ルールの書き方
\fBlibtool\fR ライブラリのサポートは、
\fBLTLIBRARIES\fR プライマリのもとに実装されている。

プログラムを \fBlibtool\fR ライブラリにリンクするためには、
ライブラリ名を指定する \fIprogram\fB_LDADD\fR 変数を使うこと。
libtool に \fB\-static\fR といったオプションを渡すためには
\fIprogram\fB_LDFLAGS\fR を使うと良い。

\fBlibtool\fR ライブラリをビルドするには、
ライブラリ名を指定する \fIlib\fB_LTLIBRARIES\fR を使うこと。
\fBそして、たとえば、\fR\fBlibtool\fR に \fB\-version\-info\fR オプションを
渡すには \fIlib\fB_LDFLAGS\fR を使うこと。
次のセクションに例がある。

作業をするためには、パッケージにいくつかの基本的なファイルを入れたり、
\fBlibtoolize\fR を使う必要があるだろう。
\fBlibtool\fR スクリプトを直接インクルードしてはならない。
.TP
.B config.guess
標準システム名を推測しようとする。
.TP
.B config.sub
標準システム名を確認するサブルーチンスクリプト。
.TP
.B ltconfig
指示されたシステムについて libtool スクリプトを作成する。
.TP
.B ltmain.sh
基本的な libtool の機能を実装した一般的なスクリプト。
.SH モジュールのダイナミックロード
\fBlibtool\fR のダイナミックロード機能を使うためには、
\fBconfigure.in\fR のなかで \fBAM_PROG_LIBTOOL\fR より前に
マクロ \fBAC_LIBTOOL_DLOPEN\fR を使わなければならない。
さもなければ、\fBlibtool\fR はそのプラットホームには
ダイナミックロードのメカニズムがないと仮定して、
これをシミュレートしようとする。
このシミュレーション機能を使うためには、
実行ファイルをリンクするときに
\fB\-dlopen\fR と \fB\-dlreopen\fR フラグを使い、
ダイナミックロードするオブジェクトを宣言しなければならない。
\fBlibtool\fR はオブジェクトファイルをリンクし、
以下のような実行ファイルのシンボルテーブルを保持した
データ構造を作成する。
.sp
.RS
.nf
struct lt_dlsymlist { const char *NAME; lt_ptr_t ADDRESS; }
.fi
.RE
.sp
\fINAME\fR には、"fprintf" のような、シンボル名のアスキー文字列が保持される。
\fIADDRESS\fR は、&fprintf のような、
適切なオブジェクトへのジェネリックポインタである。
.sp
.RS
.nf
const lt_dlsymlist * lt_preloaded_symbols;
.fi
.RE
.sp
この配列は実行ファイルにリンクされている
プリロードされたシンボルを表す。
\fB\-dlpreloaded\fR されたファイルのそれぞれについて要素が存在し、
ファイル名 \fINAME\fR と `\fB0\fR' というアドレス \fIADDRESS\fR、
およびこのファイルからエクスポートされたすべてのシンボルを保持する。
実行ファイル自身については、特別な名前 \fB@PROGRAM@\fR が使われる。
最後のエレメントは \fINAME\fR と `\fB0\fR' という \fIADDRESS\fR を持つ。

ダイナミックロードされるライブラリもしくは、
モジュールをダイナミックロードしようとする実行ファイルをリンクするときは、
\fB\-module\fR フラグを指定するのを忘れないこと。

ダイナミックロードしようとしているライブラリの外部シンボルを、
実行ファイルが参照する必要がある場合は、実行ファイルをリンクするときに
\fB\-export\-dynamic\fR を使用すること。

ライブラリ名にバリエーションがあるので、
プログラムはどれがダイナミックロードするための
正しいファイルであるのかを決定する必要がある。
直接的な方法は `\fB.la\fR' ファイルを調べて、
 \fBdlname='\fIDLNAME\fB'\fR という行を探すことである。
この行はライブラリをダイナミックロードできない場合は空で、
そうでない場合はライブラリの名前が入っている。

.SH 例
ソースファイル `foo.c', `bar.c' から `libbaz' とよばれるライブラリを作成し、
次に `a' という名前の実行ファイルを作成するために `a.c' を `libbaz' と
リンクしようといる。
.SS ライブラリの作成
\fB\(bu\fR コンパイルモード:Linux は共有ライブラリをサポートしているので、
\fBlibtool\fR は 2 つのオブジェクトファイル、
一つは静的ライブラリ (`foo.lo')、
もう一つは共有ライブラリ (`foo.o') を作成する。
ソースファイル自身へのリンクをコンパイラにやらせたくないので、
\fB\-c\fR オプションは必須である。
.sp
.RS
.nf
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
.fi
.RE	     
.sp
\fB\(bu\fR リンクモード、静的ライブラリのみをビルドする:
以前に作成された `.o' というオブジェクトファイルを指定している。
\fB\-o\fR オプションは必須である。
.sp
.RS
.nf
lightside:~% libtool cc -o libbaz.a foo.o bar.o
ar cru libbaz.a foo.o bar.o
ranlib libbaz.a
.fi
.RE	     
.sp
\fB\(bu\fR リンクモード、静的ライブラリと共有ライブラリをビルドする:
`.lo' というオブジェクトファイルを指定する。
必須オプションは、前と同じ \fB\-o\fR と
ライブラリのインストールされるディレクトリを指示する \fB\-rpath\fR である。
ライブラリは `.libs' ディレクトリに作成される。
.sp
.RS
.nf
lightside:~% libtool cc \-o libbaz.la foo.lo bar.lo \e
    \-rpath /usr/local/lib
cc \-shared \-Wl,\-soname \-Wl,libbaz.so.0 \e
    \-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)
.fi
.RE	     
.sp
\fB\(bu\fR インストールモード:ライブラリを指定したパス
(この場合は `/usr/local/lib') にインストールするために
必要なコマンドを実行する。
このモードでは共有ライブラリ (`.so') と静的ライブラリ (`.a') を
インストールするとともに、アンインストールと情報提供の目的で
libtool ファイル (`.la') がインストールされる。

このモードはふつう特権ユーザーとして実行されるので、
\fB\-n\fR または \fB\-\-dry\-run\fR オプションを
指定して結果をチェックしておくとよい。
.sp
.RS
.nf
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
.fi
.RE	     
.sp
.SS 実行ファイルの作成
最初に `a.c' をコンパイルする
.sp
.RS
.nf
cc \-c a.c
.fi
.RE	     
.sp
ライブラリが既にインストールされている場合には、
普段のように続行することができる
.sp
.RS
.nf
cc a.c \-lbaz \-L/usr/local/lib
.fi
.RE	     
.sp
ライブラリがまだインストールされていない場合は、
実行ファイルのリンク・デバッグ・インストールに
\fBlibtool\fR を使用しなければならない
(一度ライブラリがインストールされるまで、これはつづく)。
実際の実行ファイルはインストールされるまで `.libs' 内にあり、
作業ディレクトリにある実行ファイルは単なるラッパーであることに注意すること。

曖昧さを避けるため、絶対に
\fB\-l\fR と \fB\-L\fR を使ってアンインストールされた
共有ライブラリにリンクしてはならない。
`.la' ファイルへのパスだけを指定すること。
以下の (`\-lm') でわかるように、インストール済みのライブラリは問題ではない。
.sp
.RS
.nf
lightside:~% libtool cc a.o libbaz.la \-o a -lm
cc a.o \-Wl,\-\-rpath \-Wl,/usr/local/lib \e
    .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
.fi
.RE	     
.sp
.SS Makefile.am の作成
\fB\(bu\fR\ 最初に簡単な \fBconfigure.in\fR を作成し、
\fBautomake\fR と \fBlibtool\fR のためのマクロを忘れずに追加する。
.sp
.RS
.nf
AC_DEFUN(AM_INIT_AUTOMAKE)
AC_INIT(a.c)
AM_INIT_AUTOMAKE(a, 1.0)
AC_PROG_CC
AM_PROG_LIBTOOL
AC_OUTPUT(Makefile)
.fi
.RE
.sp
\fB\(bu\fR\ 対応する \fBMakefile.am\fR
.sp
.RS
.nf
# ライブラリのビルド
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
.fi
.RE
.sp
\fB\(bu\fR\ そして最後に実行する
.sp
.RS
.nf
lightside:~% aclocal; libtoolize; automake \-\-add\-missing; autoconf
lightside:~% ./configure; make
.fi
.RE
.sp
.SH 関連項目
 \fBlibtoolize\fR(1), \fBlibltdl\fR(3)
.SH 注意
プログラムのバグについては <bug-libtool@gnu.org> へ報告してください。
.br
この man ページは Ragnar Hojland Espinosa
<ragnar@ragnar-hojland.com> が作成しました。