AR(1)

名称
ar - アーカイブの作成、更新、および、アーカイブからの抽出

書式
ar [-X32_64] [-]p[mod [relpos] [count]] archive [member...]

解説
GNU ar プログラムは、アーカイブの作成、更新、および、アーカイブからの抽出を 行ないます。 アーカイブ とは、オリジナルのファイル (アーカイブの メンバ と呼びます) を復元できるような構造で、他のファイル群の集合を保持する ような一つのファイルです。

元のファイルの内容、モード (パーミッション)、タイムスタンプ、所有者、 グループの情報はアーカイブ内でも保存され、ファイル抽出時には復元 されます。

GNU ar では、メンバファイルのファイル名の長さには制限はありませんが、システム の設定によっては (他のツールで管理されるアーカイブファイルの形式との 互換性のために) メンバファイルのファイル名の長さに制限がある場合があります。 制限がある場合は、多くの場合 15 文字 (a.out 関連のファイル形式が代表的) か、 16 文字 (coff 関連のファイル形式が代表的) に制限されます。

この種類のアーカイブは、共有のサブルーチンを保持する ライブラリ として 利用されることが多いため、 ar はバイナリユーティリティと考えられます。

s 修飾子を指定した場合、 ar はアーカイブ内のリロケータブルオブジェクトで定義されたシンボル のインデックスを作成します。 一度作成されたインデックスは、 ar がアーカイブの内容を変更するときには必ず更新されます (ただし q オプション指定時は更新されません)。 このようなインデックスを持つ アーカイブを用いることによって、ライブラリのリンクが高速化されたり、 ライブラリ内のルーチンがアーカイブ内の配置にかかわらず、互いを呼び出す ことができるようになります。

nm -s または nm --print-armap によって、このインデックステーブルを表示することができます。 もし、アーカイブにインデックステーブルが含まれていない場合は、 ranlib と呼ばれる、もう一つの形式の ar を用いてテーブルだけを追加することができます。

GNU ar は、別の 2 種類の機構と互換であるようにデザインされています。 Unix システムの ar のようにコマンド行オプションで動作を制御できますし、 単一のコマンド行オプション -M を指定することで、 MRI ``librarian'' プログラムのような 標準入力から提供されるスクリプトでも制御できます。

オプション
GNU ar は最初のコマンド行オプションとして、 オペレーションコード p と、修飾子 mod を任意の順序で組み合わせたものを受け付けます。

最初のオプションの先頭にダッシュ(ハイフン)をつけることもできます。

キー文字 p は、どのオペレーションを実行するかを指定します。 キー文字としては以下のいずれか一つだけを指定することができます。

d   アーカイブからモジュールを 削除 します。 削除するモジュール名を member... として指定して下さい。 ファイル名を指定しなければアーカイブは変更されません。

    v 修飾子を指定した時には、 ar は削除する際にそのモジュール名を表示します。

m   メンバをアーカイブ内で移動します。

    あるシンボルが複数のメンバで定義されている場合は、アーカイブ内でのメンバの 順序によって、プログラムがライブラリをリンクした結果が異なることが あります。

    "m" に修飾子が指定されなかった場合は member 引数で指定したメンバはアーカイブの 最後 に移動されます。 a, b, i 修飾子を指定することによって、修飾子に応じた場所に移動します。

p   アーカイブ内の指定されたメンバを標準出力に 出力 します。 v 修飾子が指定されたときは、メンバの内容を出力する前にメンバ名を出力 します。

    member 引数 を指定しなければ、アーカイブ内のすべてのファイルが出力されます。

q   クイックアペンド。 歴史的には、member で指定されたファイルを、重複をチェックせずに アーカイブ の末尾に追加します。

    a, b, i 修飾子はこのオペレーションには 影響しません。 新たなメンバは常にアーカイブの末尾に置かれます。

    v 修飾子を指定すると、 ar は追加の際にそのファイル名を出力します。

    このオペレーションの特徴は動作速度ですので、たとえ シンボルテーブルのインデックスが存在したとしても、それを更新しません。 シンボルテーブルのインデックスを更新するには、明示的に ar s か ranlib を使って下さい。

    しかしながら、多くの異なるシステムにおいてクイックアペンドが インデックスを再構築することが仮定されていますので、 GNU ar は q は r と同じ動作をするように実装しています。

r   ファイル member... をアーカイブに挿入 (重複の際は 置換) します。 このオペレーションは q とは異なり、追加するファイルと同名のメンバがすでに存在する 場合は削除されます。

    もし member... で指定したファイルの中に存在しないものが一つでも含まれている場合は ar はエラーメッセージを出力し、そのファイル名と同名のメンバは変更 されずに保存されます。

    デフォルトでは新しいメンバはファイルの末尾に追加されますが、 a, b, i 修飾子を指定することにより、既存のメンバに対する相対的な位置関係を 指定することができます。

    このオペレーションに v 修飾子を指定すると、挿入された各ファイルに対して、ファイルが追加 された (削除された古いメンバがない) か、置換されたかを示す a または r のどちらかを含んだ一行が出力されます。

t   アーカイブ の内容、または member... に列挙されたファイルのうち、アーカイブ内に存在するものの 一覧 を出力します。 通常はメンバ名だけを表示しますが、 v 修飾子を指定することにより、モード (パーミッション)、タイムスタンプ、 所有者、グループ、サイズも表示します。

    member の指定がない場合はアーカイブ内のすべてのファイルの一覧を表示します。

    あるアーカイブ ( b.a とします) の中に同じ名前 ( fie とします) の複数のファイルが存在する場合は、 ar t b.a fie は最初のファイルだけを表示します。 同名のファイルをすべて見たい場合 はすべてのファイルの一覧を表示して下さい。 この例では ar t b.a です。

x   アーカイブから files で指定されたメンバを 抽出 します。 v 修飾子を指定すると、 ar は抽出の際にそのファイル名を出力します。

    member の指定がない場合はアーカイブ内のすべてのファイルを抽出します。

いくつかの修飾子 ( mod) をキー文字 p の直後に付けることによって、オペレーションの動作を変更する ことができます。

a   新しいファイルを既存のメンバの 後 に追加します。 a 修飾子を用いるときは、 archive 引数の前に relpos 引数として既存のメンバ名を指定する必要があります。

b   新しいファイルを既存のメンバの 前 に追加します。 b 修飾子を用いるときは、 archive 引数の前に relpos 引数として既存のメンバの名前を指定する必要があります ( i と同じ)。

c   アーカイブを 作成 します。 存在しない アーカイブ を更新するように指定した場合、そのアーカイブは必ず作成されますが、 その際、この修飾子を指定することによって、アーカイブを作成することを 明示していなければ、警告を出力します。

f   アーカイブ内の名前を切り詰めます。 通常 GNU ar は任意の長さのファイル名を受け付けます。 このため、いくつかのシステム で使われている従来の ar と互換性のないアーカイブが作成されることになります。 これが問題になる 場合は、 f 修飾子を指定して、ファイルをアーカイブに追加する際にそのファイル名を 切り詰めることができます。

i   新しいファイルを既存のメンバの 前 に挿入します。 i 修飾子を用いる時は、 archive 引数の前に relpos 引数として既存のメンバ名を指定する必要があります ( b と同じ)。

l   この修飾子は指定可能ですが、使用されません。

N   count パラメータを使用します。 アーカイブに同一名のエントリが複数ある場合、これが使用されます。 指定した名前のインスタンス count を、アーカイブから抽出または削除します。

o   メンバを抽出する際に オリジナル の時刻を保存します。 この修飾子を指定しないと、アーカイブから抽出 されたファイルのタイムスタンプは抽出時の時刻になります。

P   アーカイブ中の名前とマッチングを取るときに、フルパス名を使用します。 GNU ar はフルパス名のアーカイブ (このようなアーカイブは POSIX 準拠ではありません) を作成できませんが、他のアーカイブ作成器は可能です。 このオプションを使用すると、 GNU ar は完全なパス名を使用してファイル名のマッチングを行います。 他のツールで作成したアーカイブから 1 個のファイルを取り出す場合に有用でしょう。

s   アーカイブに他の変更がない場合でも、アーカイブにオブジェクトファイルの インデックスを書き込んだり、既存のインデックスを更新します。 この修飾子は ほかのオペレーションと併用することも、単独で使用することも可能です。 あるアーカイブに対して ar s を実行することは、そのアーカイブに対して ranlib を実行することと等価です。

S   アーカイブのシンボルテーブルを作成しません。 これを用いると大きな ライブラリを何回かに分けて作成する際に時間を短縮することができます。 この結果得られるアーカイブはリンカで使用することはできません。 シンボルテーブルを作成するためには最後に ar を実行する時に S 修飾子を外すか、そのアーカイブに対して ranlib を実行する必要があります。

u   通常 ar r... は列挙されたファイルをすべてアーカイブに挿入します。 この修飾子を指定すると、指定したファイルが既存の同名のメンバより 新しい場合 のみ ファイルを挿入します。 u 修飾子は r (置換) オペレーションだけに付けることができます。 特に、タイムスタンプの確認は q オペレーションの利点である速度を低下させるので、 qu の組み合わせは認められません。

v   オペレーションに対して 冗長 な表示を要求します。 多くのオペレーションにおいて v 修飾子が指定されると、 処理されたファイル名などの付加的な情報が表示されます。

V   この修飾子は ar のバージョン番号を表示します。

ar は、最初のオプションが -X32_64 の場合これを無視します。 AIX との互換性のためです。 本オプション指定時の動作が GNU ar デフォルトです。 ar は他のいかなる -X もサポートしません。 特に AIX ar のデフォルトである -X32 はサポートしません。

関連項目
nm(1), ranlib(1), Info の binutils の項。

COPYRIGHT
Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''.