元のファイルの 内容、モード(権限)、タイムスタンプ、所有者、グループはアーカイブに保存され、解凍時に復元できます。
GNUar は、メンバーが任意の長さの名前を持つアーカイブを保持できます。ただし、ar がシステムでどのように構成されているかによっては、他のツールで保持されるアーカイブ形式との互換性のために、member-name の長さに制限が課される場合があります。これが存在する場合、多くの場合、制限は15文字(a.out に関連するフォーマットでは一般的)または16文字(coff に関連するフォーマットでは一般的)です。
ar はバイナリユーティリティと考えられています。なぜなら、このソートのアーカイブは、一般的に必要とされるサブルーチンを保持する libraries として最も頻繁に使用されるからです。ライブラリは他のライブラリに依存することが多いため、--record-libdeps オプションが指定されている場合、ar は、ライブラリの依存関係を記録することもできます。
ar は、修飾子 s を指定したときに、アーカイブ内の再配置可能オブジェクトモジュールで定義されたシンボルへのインデックスを作成します。 作成されたインデックスは、 ar がその内容を変更するたびにアーカイブ内で更新されます (q 更新操作用に保存)。 このようなインデックスを持つアーカイブは、ライブラリへのリンクを高速化し、ライブラリ内のルーチンがアーカイブ内の配置に関係なく相互に呼び出すことを可能にします。
このインデックステーブルを表示するには、nm -s または nm --print-armap を使用できます。アーカイブにテーブルがない場合は、ar と呼ばれる別の形式の ranlib を使用してテーブルだけを追加できます。
GNU ar は、オプションで thin アーカイブを作成できます。このアーカイブには、シンボルインデックスと、アーカイブのメンバーファイルの元のコピーへの参照が含まれています。これは、再配置可能なオブジェクトが使用可能なままであることが期待され、各オブジェクトの内容をコピーしても時間とスペースを無駄にするだけであるローカル構築ツリー内で使用するライブラリを構築する場合に便利です。
アーカイブは thin の場合もあれば、通常の場合もあります。両方を同時に使用することはできません。. アーカイブが作成されると、まずそのアーカイブを削除し、次にその場所に新しいアーカイブを作成しない限り、その形式を変更することはできません。
Thin アーカイブも フラット化 されているため、ある thin アーカイブを別のthin アーカイブに追加しても、通常のアーカイブのようにネストされることはありません。代わりに、最初のアーカイブの要素が2番目のアーカイブに個別に追加されます。
アーカイブの要素へのパスは、アーカイブ自体に対して相対的に保存されます。
GNU ar は 2つの異なるファシリティと互換性があるように設計されています。Unix システム上のさまざまな種類の ar のように、コマンドラインオプションを使ってその動作を制御することができます。あるいは、単一のコマンドラインオプション -M を指定した場合、MRI の「librarian」プログラムのように、標準入力で提供されるスクリプトを使って制御することができます。
必要に応じて、最初のコマンドライン引数をダッシュ (-) で始めることができます。
p キー文字は、実行する操作を指定します。次のいずれかを指定できますが、指定する必要があるのは 1つだけです:
v 修飾子を指定すると、削除された各モジュールが ar で一覧表示されます。
シンボルが複数のメンバーで定義されている場合、アーカイブ内のメンバーの順序によって、ライブラリを使用したプログラムのリンク方法が異なる場合があります。
"m" で修飾子が使用されていない場合、member 引数で指定した任意のメンバはアーカイブの 最後尾 に移動されます。代わりに、 a、b、または i 修飾子を使用して、指定した場所にも移動できます。
member 引数を指定しない場合、アーカイブ内のすべてのファイルが印刷されます。
修飾子 a、 b、 i はこの操作に影響を与えません。新しいメンバーは常にアーカイブの最後に配置されます。
v 修飾子は、追加された各ファイルをar にリストさせます。
この操作のポイントは速度であるため、ar の実装には、アーカイブのシンボルテーブルが存在する場合、それを更新しないオプションがあります。しかし、あまりにも多くの異なるシステムがシンボルテーブルが常に最新であることを前提としているため、 GNU ar は quick append を行ってもテーブルを再構築します。
注意 - GNU ar は、コマンド qs を r の同義語として扱います。アーカイブ内の既存のファイルを置き換え、最後に新しいファイルを追加します。
member... で指定されたファイルのいずれかが存在しない場合、ar はエラーメッセージを表示し、その名前に一致するアーカイブの既存のメンバーをそのまま残します。
デフォルトでは、新しいメンバーはファイルの最後に追加されますが、 a、b、または i のいずれかの修飾子を使用して、既存のメンバーに対して相対的な配置を要求できます。
この操作で使用される修飾子 v は、挿入された各ファイルの出力の行と、ファイルが追加された(古いメンバーが削除されていない)か置換されたかを示す a または r の文字の1つを引き出します。
member を指定しない場合は、アーカイブ内のすべてのファイルが一覧表示されます。
アーカイブ(たとえば、b.a) 内に同じ名前のファイル(たとえば、fie) が複数ある場合、ar t b.a fie は最初のもののみをリストします。これらすべてを表示するには、完全なリスト(この例では、ar t b.a) を指定する必要があります。
I<member> を指定しない場合、アーカイブ内のすべてのファイルが展開されます。
thin アーカイブからファイルを抽出することはできません。また、 P で作成されたアーカイブからの抽出には制限があります。パスは絶対パスであってはならず、 ".." を含んではならず、パス内のサブディレクトリが存在している必要があります。これらの制限を避けたい場合は、--output オプションを使用して、出力するディレクトリを指定します。
操作の動作を調整するために、modキー文字の直後にいくつかの修飾子( p)を指定できます。
binutils が --enable-deterministic-archives と設定されている場合、このモードはデフォルトで有効になります。 下記の U 修飾子で無効にすることができます。
アーカイブ内の名前を切り詰めます。GNU ar は通常、任意の長さのファイル名を許可します。これにより、一部のシステムではネイティブの ar プログラムと互換性のないアーカイブが作成されます。これが懸念される場合は、 f 修飾子を使用して、ファイル名をアーカイブに入れるときにファイル名を切り捨てることができます。
ar rcST archive.a subdir/file1 subdir/file2 file1
は、現在のディレクトリの最初の "subdir/file1" が "file1" に置き換えられます。 P を追加すると、この置換が防止されます。
注意: アーカイブが確定的な方法で作成された場合、たとえば、 D 修飾子を使用して作成された場合、置換は常に行われ、 u 修飾子は無効になります。
binutils が --enable-deterministic-archives で設定されていない限り、これがデフォルトです。
ar プログラムは、修飾子でもアクションでもない いくつかのコマンドラインオプションもサポートしていますが、特定の方法で動作を変更します。
このオプションは、ツールチェーンがプラグインサポートを有効にして構築されている場合にのみ使用できます。
--plugin が指定されていないが、プラグインサポートが有効になっている場合、 ar は ${libdir}/bfd-plugins 内のファイルをアルファベット順に繰り返し、問題のオブジェクトを要求する最初のプラグインが使用されます。
このプラグイン検索ディレクトリは、ld の -plugin オプションで使用されるものではないことに注意してください。ar にリンカープラグインを使用させるには、${libdir}/bfd-pluginsディレクトリにコピーする必要があります。GCC ベースのコンパイルでは、リンカープラグインは liblto_plugin.so.0.0.0 と呼ばれます。Clang ベースのコンパイルでは、LLVMgold.so と呼ばれます。GCC プラグインは常に以前のバージョンと下位互換性があるため、最新のものをコピーするだけで十分です。
注意: このオプションの存在は x の抽出操作を仮定しますが、コマンドラインにはこのオプションを含める必要があります。
file 中のオプションは空白で区切られます。空白文字は、オプション 全体を一重引用符または二重引用符で囲むことによってオプションに含める ことができます。任意の文字 (バックスラッシュを含む) は、含まれる文字の 前にバックスラッシュを付けることによって含めることができます。 file 自体に追加の @file オプションを含めることができます。 このようなオプションは再帰的に処理されます。
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 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".