ar(1)

名前
ar - 書庫の作成、変更、および書庫からのファイルの取出しを行う

書式
ar [-] {dmpqrtx}[abcilosSuvV] [membername ] archive files ...

説明
GNU ar プログラムは書庫 ( archive ) ファイルの作成、変更、および書庫からのファイルの取出しを行う。書庫は いくつかのファイルを集めて一つのファイルにしたもので、内部からオリジ ナルのファイルそれぞれを復元することができるようになっている。内部に含 まれるファイルを書庫の メンバー と呼ぶ。

オリジナルのファイルの内容、モード (許可属性)、タイムスタンプ、オーナー およびグループも書庫に保存され、取出しの際に再設定することができる。

GNU ar では、書庫に含まれるメンバーの名前の長さに制限はない。ただし ar のインストール時の設定によっては、制限が付いている場合があるかもしれな い (他のツールで扱える書庫フォーマットとの互換性のためであることが多い)。 制限がある場合には、 15 文字 (a.out 関連フォーマット) または 16 文字 (coff 関連フォーマット) であることが多い。

ar はバイナリーユーティリティ (binary utility) とされている。 なぜならこの種の書庫は汎用のサブルーチンをまとめた ライブラリ として用いられることが多いからである。

ar は、書庫に入っているリロケータブルなオブジェクトモジュールに含まれるシ ンボルの索引 (index) を作成することができる。これは修正子 (modifier) `s' が指定されたときの動作である。一度作成されると、この索引は ar によって書庫の内容が変更されるたびに更新される (ただし `q' によっ て書庫が更新された場合を除く)。このような索引を持った書庫では、ライブ ラリとしてリンクされる場合の速度が向上する。またライブラリの内部に含まれる ルーチンが、書庫内部での位置によらずお互いを呼び出すことができるように なる。

`nm -s' または `nm --print-armap' とすればこの索引をリ ストすることができる。書庫に索引がない場合は、 ar の別名である ranlib を用いて索引を追加することもできる。

ar の実行には最低 2 つの引数が必要である。一つは ar の動作 (operation) を指定する一文字の英字 (動作指定子 :keyletter) であ り (他の英字が修正子として付随することもある)、もう一つは実際に操作の 対象となる書庫の名前である。

ほとんどの動作では動作対象とするファイルを files 引数として与えることもできる。

オプション
GNU ar では動作指定子 p と修正子 mod の順番は任意であるが、これらはまとめて最初のコマンドライン引数に与える 必要がある。

最初のコマンドライン引数の先頭にダッシュ (-) を加えてもかまわない。

動作指定子 p では実行する動作を指定する。これには以下のどれかを指定する。複数指定す ることはできない。

d   書庫からモジュールを削除 ( Delete ) する。削除するモジュールの名前は files に指定する。もし一つもファイルが指定されなかった場合は、書庫に何の操作 も行わない。

    修正子として v を指定すると、 ar は削除したモジュールをそれぞれ表示する。

m   書庫中のメンバーを移動 ( Move )する。

    一つのシンボルが書庫内部の複数のメンバーによって定義されている場合、メ ンバーの配置の順番が異なると、このライブラリへのリンクのされ方が予想と は異なる可能性がある。

    修正子による指定がなければ、 m による操作では files 引数によって指定されたメンバーを書庫の最後尾に移動する。移動先を 修正子 `a'、 `b'、 i によって指定することもできる。

p   指定された書庫内部のメンバー (複数可) を標準出力に表示 ( Print ) する。 `v' 修正子が指定された場合には、メンバーの内容を標準出 力に表示する前にそのメンバーの名前を表示する。

    files を指定しないと、書庫の内部のすべてのファイルが表示される。

q   files を書庫の最後に追加する。このとき置き換えのチェックを行わない (Quickappend)。

    修正子 a、b、i はこの操作には影響しない。新しいメンバーは常に書庫の最後に配置される。

    修正子 vをつけるとar は追加する際にそれぞれのファイルを表示する。

    この操作のミソは速度なので、書庫のシンボルテーブルは更新されない (存在 していても更新されない)。シンボルテーブルを明示的に更新させるには ar s または ranlib を用いればよい。

    しかし、 quick append の際に index が再構築されるとみなしている システムがあまりにも多いので、 GNU ar の実装では q を r と同義としている。

r   書庫に files を挿入し、同名のファイルがあったら置換 ( Replacement ) する。この操作は q とは異なり、もとから書庫にあったメンバーのうち追加したメンバーと同名の ものはすべて削除される。

    files のリストの中に存在しないファイルがあった場合 ar はエラーを表示する。そしてそのメンバーに関しては古いものを書庫にそのま ま残し、変更を行なわない。

    デフォルトでは新たなメンバーはファイルの最後に追加される。 修正子 a、 b、 i を使えば、現在存在しているメンバー からの相対位置として、新たなファイルを追加する位置を指定することができ る。

    この操作で修正子 v を用いると、挿入されるファイルを一行ずつ表示する。またこのとき a または r の文字を表示する。これはそれぞれファイルが追加 (append) された (つまり書庫には削除すべき古いメンバーが存在しなかった) か、置換 (replace) されたかに対応する。

t   書庫の内容の表 ( table ) を表示する。 files が指定された場合は、files のうち書庫に存在するものを表示する。 通常はメンバーの名前のみが表示される。モード (パーミッション)、タイム スタンプ、オーナー、グループ、サイズなども表示させたい場合には、リクエ ストの際に同時に修正子 v をつければ良い。

    files を指定しなければ、書庫にあるすべてのファイルがリストされる。

    同じ名前のファイル (仮に fie とする) が書庫 (b.a とする) に二つ以上存在する場合には、 `ar t b.a fie' では最初のものしか表 示しない。すべての fie を表示させたい場合には、書庫のファイル全てを表示させるように実行しなけ ればならない (この例ならば `ar t b.a' となる)。

x   メンバーを書庫から取り出す ( eXtract )。この操作に修正子 v を用いると、 ar は取出したファイルをそれぞれ表示する。

    files を何も指定しないと、書庫のすべてのファイルが取り出される。

いくつかの修正子 ( mod ) を動作指定子 p に続けて指定することができる。 これによって動作を調整することができる。

a   新たなファイルを、すでに書庫に存在するメンバーの後 ( after ) に追加する。修正子 a を用いる場合は、書庫にすでに存在するメンバーの名前を引数 membername として書庫名の指定の前に置かなければならない。

b   新たなファイルを、すでに書庫に存在するメンバーの前 ( before ) に追加する。修正子 b を用いる場合は、書庫にすでに存在するメンバーの名前を引数 membername として、書庫名の指定の前に置かなければならない。 ( i と同じ動作をする)

c   書庫を作成 ( create ) する。書庫を更新する操作の場合には、指定した書庫が存在しなければ、そ れは常に作成される。しかしこのとき警告メッセージが出る。この修正子をあ らかじめ同時に指定しておけば、この警告を抑止することができる。

f   書庫の中の名前を切りつめる。通常 ar では、ファイル名には任意の長さを指定できる。しかしこのことは、他のシス テムのネイティブな ar プログラムと互換性のない書庫を作ってしまう原因にもなりかねない。もしこ れが問題となるときは、修正子 f を用いれば書庫の中に入れるファイルの名前を切りつめることができる。

i   新しいファイルを書庫に存在するメンバーの前に挿入 (insert) する。この修 正子 i を用いる際には、書庫に存在しているメンバーの名前を membername 引数として書庫の指定の前に置く必要がある。 ( b と同じ動作をする)

l   この修正子はエラーにはならないが何の効力もない。

o   書庫からメンバーを取り出すときに、元の日付を保存する (original)。 この修正子を指定しなければ、 書庫から取り出されたファイルのタイムスタンプは取り出し時のものになる。

s   オブジェクトファイルの索引を書庫に書き込むか、または存在する索引を更新 する。書庫に何の変化がなくても更新は行われる。この修正子はどんな操作と も同時に用いることができるし、単独でも用いることができる。 `ar s' を書庫に対して実行するのは、 `ranlib' と等価である。

S   書庫のシンボルテーブルを作成しない。 これは大きな書庫を構築する場合は結構な速度向上になる。 結果としてできた書庫は、リンカからは使うことができない。 シンボルテーブルをつくるには、 最後の段階で実行される ar に S 修正子をつけないか、あるいはそのアーカイブに ranlib を実行しなければならない。

u   通常 ar r ... はリストされたすべてのファイルを書庫に挿入する。指定したファ イルと同名のメンバーが書庫中にすでにあった時に、元のメンバーの方が古い 場合に限って挿入を行いたい場合には、この修正子を使うと良い (update)。 `u' 修正子を用いることができるのは r 操作 (replace) の場合に限られる。 qu の組み合わせは許されない。なぜならタイムスタンプをチェックすると `q' 操作の速度面での利点が損なわれてしまうからである。

v   この修正子は饒舌 ( verbose ) モードの動作を指定するために用いられる。 `v' 修正子が追加 されると、多くの操作において、より詳細な情報が表示される (例えば処理し ているファイル名など)。

V   この修正子は ar のバージョン番号を表示する。

関連項目
info の ` binutils ' エントリ、 The GNU Binary Utilities, Roland H. Pesch (October 1991)、 nm(1)、 ranlib(1)

著作権
Copyright (c) 1991 Free Software Foundation, Inc.

Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.

Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.

Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be included in translations approved by the Free Software Foundation instead of in the original English.