AR

Section: GNU Development Tools (1)
Updated: 2025-09-17
Index JM Home Page roff page
 

名前

ar - アーカイブの作成、変更、および抽出  

書式

ar [-X32_64] [-]p[mod] [--plugin name] [--target bfdname] [--output dirname] [--record-libdeps libdeps] [--thin] [relpos] [count] archive [member...]  

説明

GNUar プログラムは、書庫(アーカイブ)を作成、変更、および抽出します。archive は、元の個々のファイル(アーカイブの メンバーと呼ばれる)を取得できる構造で他のファイルのコレクションを保持する単一のファイルです。

元のファイルの 内容、モード(権限)、タイムスタンプ、所有者、グループはアーカイブに保存され、解凍時に復元できます。

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」プログラムのように、標準入力で提供されるスクリプトを使って制御することができます。  

オプション

GNU ar を使用すると、最初のコマンドライン引数内で、操作コード p と修飾子フラグ mod を任意の順序で混在させることができます。

必要に応じて、最初のコマンドライン引数をダッシュ (-) で始めることができます。

p キー文字は、実行する操作を指定します。次のいずれかを指定できますが、指定する必要があるのは 1つだけです:

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

v 修飾子を指定すると、削除された各モジュールが ar で一覧表示されます。

m
この操作を使用して、アーカイブ内のメンバーを移動します。

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

"m" で修飾子が使用されていない場合、member 引数で指定した任意のメンバはアーカイブの 最後尾 に移動されます。代わりに、 ab、または i 修飾子を使用して、指定した場所にも移動できます。

p
アーカイブの指定されたメンバーを標準出力ファイルに出力します。v 修飾子が指定されている場合は、メンバー名を表示してからその内容を標準の出力にコピーします。

member 引数を指定しない場合、アーカイブ内のすべてのファイルが印刷されます。

q
Quick append; 従来は、置換を確認せずに、member... の最後にarchiveファイルを追加していました。

修飾子 abi はこの操作に影響を与えません。新しいメンバーは常にアーカイブの最後に配置されます。

v 修飾子は、追加された各ファイルをar にリストさせます。

この操作のポイントは速度であるため、ar の実装には、アーカイブのシンボルテーブルが存在する場合、それを更新しないオプションがあります。しかし、あまりにも多くの異なるシステムがシンボルテーブルが常に最新であることを前提としているため、 GNU ar は quick append を行ってもテーブルを再構築します。

注意 - GNU ar は、コマンド qsr の同義語として扱います。アーカイブ内の既存のファイルを置き換え、最後に新しいファイルを追加します。

r
member... のファイルを archive に挿入します(置換を使用して)。この操作は、追加されるメンバーと名前が一致する既存のメンバーが削除されるという点で、 q とは異なります。

member... で指定されたファイルのいずれかが存在しない場合、ar はエラーメッセージを表示し、その名前に一致するアーカイブの既存のメンバーをそのまま残します。

デフォルトでは、新しいメンバーはファイルの最後に追加されますが、 ab、または i のいずれかの修飾子を使用して、既存のメンバーに対して相対的な配置を要求できます。

この操作で使用される修飾子 v は、挿入された各ファイルの出力の行と、ファイルが追加された(古いメンバーが削除されていない)か置換されたかを示す a または r の文字の1つを引き出します。

s
アーカイブにインデックスを追加するか、すでに存在する場合は更新します。注意 このコマンドは、コマンドまたは修飾子として使用できるため、1つのコマンド文字しか使用できないという規則の例外です。どちらの場合も同じことを行います。
t
archiveの内容、またはアーカイブに存在する member... にリストされたファイルの内容をリストするテーブルを表示します。通常はメンバー名のみが表示されますが、修飾子 O が指定されている場合は、メンバーの対応するオフセットも表示されます。最後に、モード(パーミッション)、タイムスタンプ、所有者、グループ、サイズを表示するには、 v 修飾子を含める必要があります。

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

アーカイブ(たとえば、b.a) 内に同じ名前のファイル(たとえば、fie) が複数ある場合、ar t b.a fie は最初のもののみをリストします。これらすべてを表示するには、完全なリスト(この例では、ar t b.a) を指定する必要があります。

x
アーカイブからmember) という名前のメンバーを抽出 します。この操作で v 修飾子を使用すると、ar が抽出するときに個々の名前をリストするように要求できます。

 I<member> を指定しない場合、アーカイブ内のすべてのファイルが展開されます。

thin アーカイブからファイルを抽出することはできません。また、 P で作成されたアーカイブからの抽出には制限があります。パスは絶対パスであってはならず、 ".." を含んではならず、パス内のサブディレクトリが存在している必要があります。これらの制限を避けたい場合は、--output オプションを使用して、出力するディレクトリを指定します。

操作の動作を調整するために、modキー文字の直後にいくつかの修飾子( p)を指定できます。

a
アーカイブの既存のメンバーのに新しいファイルを追加します。 a修飾子を使用する場合、既存のアーカイブ・メンバーの名前は、archive の前に relpos 引数として存在する必要があります。
b
新しいファイルをアーカイブの既存のメンバーのに追加します。b 修飾子を使用する場合、既存のアーカイブ・メンバーの名前は、archive の前に relpos 引数として存在する必要があります(i と同じ)。
c
アーカイブを作成 します。指定されたarchive が存在しない場合は、更新を要求したときに常に作成されます。ただし、この修飾子を使用して作成することを事前に指定しない限り、警告が表示されます。
D
deterministicモードで操作します。ファイルとアーカイブインデックスを追加するときは、UID、GID、タイムスタンプ にゼロを使用し、すべてのファイルに一貫したファイルモードを使用します。このオプションを使用する場合、ar を同一のオプションおよび同一の入力ファイルとともに使用すると、入力ファイルの所有者、グループ、ファイルモード、または変更時刻に関係なく、複数の実行によって同一の出力ファイルが作成されます。

binutils--enable-deterministic-archives と設定されている場合、このモードはデフォルトで有効になります。 下記の U 修飾子で無効にすることができます。

アーカイブ内の名前を切り詰めます。GNU ar は通常、任意の長さのファイル名を許可します。これにより、一部のシステムではネイティブの ar プログラムと互換性のないアーカイブが作成されます。これが懸念される場合は、 f 修飾子を使用して、ファイル名をアーカイブに入れるときにファイル名を切り捨てることができます。

i
アーカイブの既存のメンバーのに新しいファイルを挿入します。修飾子 iを使用する場合、既存のアーカイブ・メンバーの名前は、archive の前に relpos 引数として存在する必要があります。(b と同じ)。
l
Specify dependencies of this library. 依存関係は、このオプション文字の直後に記述し、リンカーのコマンド行と同じ構文を使用し、単一の引数内で指定する必要があります。つまり、複数の項目が必要な場合は、それらを引用して 1つのコマンドライン引数を形成する必要があります。例 l "-L/usr/local/lib -lmydep1 -lmydep2"
N
count パラメータを使用します。これは、アーカイブ内に同じ名前のエントリが複数ある場合に使用されます。指定された名前のインスタンス count をアーカイブから抽出または削除します。
o
メンバーを抽出するときに、メンバーのオリジナル日付を保持します。この修飾子を指定しない場合、アーカイブから抽出されたファイルには、抽出時刻がスタンプされます。
O
アーカイブ内のメンバー・オフセットを表示します。t オプションと一緒に使用します。
P
アーカイブ内の名前を照合または保存する場合は、フルパス名を使用します。 フルパス名で作成されたアーカイブはPOSIXに準拠していないため、最新の GNU ツール以外のツールでは動作しない可能性があります。 GNU ar を使用せずにこのようなアーカイブをP で変更すると、アーカイブが thin アーカイブでない限り、フルパス名が削除されます。 P を使用しない r では、置換する要素を選択するときにパスが無視されるため、 P はthin アーカイブにファイルを追加する場合に便利です。そのため、

        ar rcST archive.a subdir/file1 subdir/file2 file1

は、現在のディレクトリの最初の "subdir/file1""file1" に置き換えられます。 P を追加すると、この置換が防止されます。

s
アーカイブに対して他の変更が行われていない場合でも、オブジェクトファイルインデックスをアーカイブに書き込むか、既存のインデックスを更新します。この修飾子フラグは、任意の操作と一緒に使用することも、単独で使用することもできます。アーカイブに対してar sを実行することは、アーカイブに対してranlib を実行することと同じです。
S
アーカイブシンボルテーブルを生成しません。これにより、いくつかのステップで大規模なライブラリの構築をスピードアップできます。結果のアーカイブはリンカでは使用できません。シンボルテーブルを構築するには、 S の最後の実行で ar 修飾子を省略するか、アーカイブに対して ranlib を実行する必要があります。
T
--thin の廃止されたエイリアス。T は、X/Open System Interface で指定されているように、多くの ar 実装では T が異なる意味を持つため、推奨されません。
u
通常、ar r... はリストされたすべてのファイルをアーカイブに挿入します。同じ名前の既存のメンバーよりも新しい、リストしたファイルのonly を挿入したい場合は、この修飾子を使用します。u 修飾子は、 r (置換)操作でのみ使用できます。特に、タイムスタンプをチェックすると、qの操作の、速度の利点が失われるため、 quの組み合わせは許可されません。

注意: アーカイブが確定的な方法で作成された場合、たとえば、 D 修飾子を使用して作成された場合、置換は常に行われ、 u 修飾子は無効になります。

U
deterministicモードで動作しません。これは、上記の D 修飾子の逆です。追加されたファイルとアーカイブインデックスは、実際のUID、GID、タイムスタンプ、ファイルモードの値を取得します。

binutils--enable-deterministic-archives で設定されていない限り、これがデフォルトです。

v
この修飾子は、verboseバージョンの操作を要求します。多くの操作では、修飾子 v が追加されると、処理されたファイル名などの追加情報が表示されます。
V
この修飾子は arのバージョン番号を表示します。

ar プログラムは、修飾子でもアクションでもない いくつかのコマンドラインオプションもサポートしていますが、特定の方法で動作を変更します。

--help
arでサポートされているコマンドラインオプションの一覧を表示して終了します。
--version
ar のバージョン情報を表示して終了します。
-X32_64
ar は、AIXとの互換のために、 -X32_64と綴られた最初のオプションを無視します。このオプションによって生成される動作は、GNU arのデフォルトです。ar は、他の -X オプションをサポートしていません。特に、AIX arのデフォルトである-X32 はサポートしていません。
--plugin name
オプションのコマンドラインスイッチ --plugin name を使用すると、arname と呼ばれるプラグインをロードします。 これにより、リンク時の最適化情報を含むオブジェクトファイルなど、より多くのファイル形式のサポートが追加されます。

このオプションは、ツールチェーンがプラグインサポートを有効にして構築されている場合にのみ使用できます。

--plugin が指定されていないが、プラグインサポートが有効になっている場合、 ar${libdir}/bfd-plugins 内のファイルをアルファベット順に繰り返し、問題のオブジェクトを要求する最初のプラグインが使用されます。

このプラグイン検索ディレクトリは、ld-plugin オプションで使用されるものではないことに注意してください。ar にリンカープラグインを使用させるには、${libdir}/bfd-pluginsディレクトリにコピーする必要があります。GCC ベースのコンパイルでは、リンカープラグインは liblto_plugin.so.0.0.0 と呼ばれます。Clang ベースのコンパイルでは、LLVMgold.so と呼ばれます。GCC プラグインは常に以前のバージョンと下位互換性があるため、最新のものをコピーするだけで十分です。

--target target
オプションのコマンドラインスイッチ --target bfdname は、アーカイブメンバーがシステムのデフォルトフォーマットとは異なるオブジェクトコードフォーマットであることを指定します。詳細は Target Selection(訳注: infoファイル内のみ) を参照してください。
--output dirname
--output オプションを使用すると、アーカイブ・メンバーを抽出するディレクトリへのパスを指定できます。このオプションを指定しない場合は、現在のディレクトリが使用されます。

注意: このオプションの存在は x の抽出操作を仮定しますが、コマンドラインにはこのオプションを含める必要があります。

--record-libdeps libdeps
--record-libdeps オプションは l 修飾子と同じですが、長い形式で処理されます。
--thin
指定されたarchivethinアーカイブにします。すでに存在し、通常のアーカイブである場合、既存のメンバーはarchiveと同じディレクトリに存在する必要があります。
@file
file からコマンドラインオプションを読み込みます。読み込まれた オプションは、元の @file オプションの代わりに挿入されます。 fileが存在しない場合、または読み込めない場合、オプションは 文字通りに扱われ、削除されません。

file 中のオプションは空白で区切られます。空白文字は、オプション 全体を一重引用符または二重引用符で囲むことによってオプションに含める ことができます。任意の文字 (バックスラッシュを含む) は、含まれる文字の 前にバックスラッシュを付けることによって含めることができます。 file 自体に追加の @file オプションを含めることができます。 このようなオプションは再帰的に処理されます。

 

関連項目

nm(1), ranlib(1), とbinutils 用の Info エントリ。  

著作権

Copyright (c) 1991-2025 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.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".


 

Index

名前
書式
説明
オプション
関連項目
著作権

This document was created by man2html, using the manual pages.