ar コマンド
目的
リンケージ・エディターが使う索引付きライブラリーを保守します。
構文
ar [ -c ] [ -l ] [ -g | -o ] [ -s ] [ -v ] [ -C ] [ -T ] [ -z ] { -h | -p | -t | -x } [ -X {32|64|32_64|d64| any}] ArchiveFile [ File ... ]
ar [ -c ] [ -l ] [ -g | -o ] [ -s ] [ -v ] [ -C ] [ -T ] [ -z ] { -m | -r [ -u ] } [ { -a | -b | -i } PositionName ] [ -X {32|64|32_64|d64|any}] ArchiveFile File ...
ar [ -c ] [ -l ] [ -g | -o ] [ -s ] [ -v ] [ -C ] [ -T ] [ -z ] { -d | -q } [ -X {32|64|32_64|d64|any}] ArchiveFile File ...
ar [ -c ] [ -l ] [ -v ] [ -C ] [ -T ] [ -z ] { -g | -o | -s | -w } [ -X {32|64|32_64|d64|any}] ArchiveFile
説明
ar コマンドは、リンケージ・エディターが使う索引付きライブラリーを保守します。 ar コマンドは、1 つ以上の指定されたファイルを組み合わせて、ar アーカイブ・フォーマットで書かれた単一のアーカイブ・ファイルにします。 ar コマンドは、ライブラリーを作成するときに、移送可能なフォーマットのヘッダーを作成します。また、ライブラリーを作成または更新するときには、記号テーブルを再構築します。 索引付きアーカイブと記号テーブルのフォーマットと構造については、ar ファイル・フォーマット・エントリーのセクションを参照してください。
ar コマンドが認識するファイル・フォーマットは 2 つあります。 ビッグ・アーカイブ・フォーマット ar_big はデフォルトのファイル・フォーマットで、32 ビットと 64 ビットの両方のオブジェクト・ファイルをサポートします。スモール・アーカイブ・フォーマットは、AIX® 4.3 よりも古いバージョンで認識されるアーカイブを 作成するために使用できます (-g フラグを参照してください)。 64 ビット・オブジェクトをスモール・フォーマット・アーカイブに追加する場合は、-g を指定した場合を除き、ar コマンドはまずそれをビッグ・フォーマットに変換します。 デフォルトでは、ar は 32 ビット・オブジェクト・ファイルだけを処理します。 アーカイブの 64 ビット・オブジェクト・ファイルは無視されます。 この動作を変更するには、-X フラグを使用するか、 OBJECT_MODE 環境変数を設定します。
フラグ
ar コマンドでは、cClosTv セットからオプションのフラグを幾つでも指定できます。 フラグ・セット dhmopqrstwx からは、フラグを 1 つ指定する必要があります。 -m または -r フラグを選択する場合は、位置決めフラグ (-a、-b、または -i) も指定できます。-a、-b、または -i フラグの場合は、ArchiveFile (PositionName) の中のファイルの名前も指定する必要があります。
項目 | 説明 |
---|---|
-a PositionName | 指定されたファイルを、PositionName パラメーターに指定されている既存のファイルのあとに配置します。 |
-b PositionName | 指定されたファイルを、PositionName パラメーターに指定されている既存のファイルの前に配置します。 |
-c | library の作成時に生成される通常メッセージを抑制します。 |
-C | 抽出されたファイルによってファイルシステム内の類似名のファイルが置換されないようにします。 |
-d | ライブラリーから指定のファイルを削除します。 |
-g | アーカイブのメンバーを、未使用スペースの量を最小限にして最大限のローダー効率を確保するような順序で配置します。 ほとんどすべての場合、-g フラグは、アーカイブのメンバーを、論理的にリンクされている順序に従って物理的に配置します。 その結果生成されるアーカイブは常にスモール・フォーマットで書き込まれるので、このフラグを使うことにより、ビッグ・フォーマットのアーカイブをスモール・フォーマットのアーカイブに変換することができます。 64 ビットの XCOFF オブジェクトを含むアーカイブは、スモール・フォーマットで作成したり、スモール・フォーマットに変換したりすることはできません。 |
-h | 指定のファイルのメンバー・ヘッダー内の修正時刻を、現在の日時に設定します。 ファイル名を指定しなかった場合は、ar コマンドはすべてのメンバー・ヘッダーのタイム・スタンプを設定します。 このフラグは、-z フラグと一緒には使用できません。 |
-i PositionName | 指定のファイルを、PositionName パラメーターに指定されている既存のファイルの前に配置します (-b と同じ)。 |
-l | TMPDIR ディレクトリー (デフォルトでは、/tmp) ではなく、現行 (ローカル) ディレクトリーの中に一時ファイルを配置します。 |
-m | 指定のファイルをライブラリー内の別の位置に移動します。 デフォルトでは、指定のファイルをライブラリーの終わりに移動します。 他の位置を指定するには、位置決めフラグ (abi) を使います。 |
-o | アーカイブのメンバーを、未使用スペースの量を最小限にして最大限のローダー効率を確保するような順序で配置します。 ほとんどすべての場合、-o フラグは、アーカイブのメンバーを、論理的にリンクされている順序に従って物理的に配置します。 その結果生成されるアーカイブは常にビッグ・アーカイブ・フォーマットで書き込まれるので、このフラグを使うことにより、スモール・フォーマットのアーカイブをビッグ・フォーマットのアーカイブに変換することができます。 |
-p | Files パラメーターに指定されたファイルの内容を、標準出力に書き出します。ファイルを指定しなければ、ArchiveFile パラメーターに指定されているすべてのファイルの内容が書き出されます。 |
-q | 指定のファイルをライブラリーの終わりに追加します。 同じファイルを 2 回指定すれば、そのファイルをライブラリーに 2 回入れることができます。 |
-r | 指定されたファイルが既にライブラリー内にある場合は、そのファイルを置換します。
指定されたファイルは、ライブラリー内で交換対象のファイルと同じ位置を占めるので、
位置決めフラグを使用しても効果はありません。
-u フラグ (更新) と共に -r フラグを使用した場合は、最後にライブラリー・ファイルに追加された後で修正されたファイルだけを置換します。
指定されたファイルがライブラリー内にないときは、ar コマンドはそのファイルを追加します。 この場合は、位置決めフラグにより配置が変化します。 位置を指定しなければ、新しいファイルはライブラリーの終わりに追加されます。 同じファイルを 2 回指定すると、そのファイルをライブラリーに 2 回入れることができます。 |
-s | ar コマンドがライブラリーの内容を修正したかどうかに関係なく、無条件にライブラリー記号テーブルを再生成させます。 このフラグは、ライブラリーに対して strip コマンドを使用した後で、ライブラリー記号テーブルを復元するために使います。 |
-t | ライブラリーの内容のテーブルを標準出力に書き出します。 ファイル名を指定した場合は、指定したファイルだけが表示されます。 ファイルを指定しなければ、-t フラグはライブラリー内のすべてのファイルを出力します。 |
-T | アーカイブ・メンバー名が、ファイルシステムがサポートしている長さよりより長い場合に、ファイル名の切り捨てができるようにします。 ファイルシステムは、アーカイブ・メンバー名の最大長である 255 文字に等しい長さの名前をサポートしているので、このオプションは効力がありません。 |
-u | 最後にコピーされた後で変更されたファイルだけをコピーします (上記の -r フラグの説明を参照)。 |
-v | 新しいライブラリーの作成に関して、ファイル単位の詳細な記述を標準出力に書き出します。 このフラグを -t フラグと共に使うと、ls -l コマンドの場合と同様の長形式のリストが表示されます。 -x フラグと共に使用した場合は、各ファイルの前に名前が表示されます。 -h フラグと共に使用した場合は、メンバー名と更新された修正時刻が出力されます。 |
-w | アーカイブ記号テーブルを表示します。 各記号は、記号が定義されているファイルの名前と共に出力されます。 |
-x | 指定されたファイルを現行ディレクトリーにコピーすることにより、それらのファイルを抽出します。 これらのコピーは、ライブラリー内に残っているオリジナル・ファイルと同じ名前になります。 ファイルを 1 つも指定しなければ、-x フラグはライブラリー内のすべてのファイルをコピーします。 このプロセスによってライブラリーが変更されることはありません。 |
-X mode | ar によって検査するオブジェクト・ファイルのタイプを指定します。
mode は次のいずれかでなければなりません。
|
-z | アーカイブの一時コピーを作成し、要求されるすべての変更をコピーに対して実行します。 すべての操作が正常に完了したら、アーカイブの作業用コピーは、元のコピーの上にコピーされます。 このフラグは、-h フラグと一緒には使用できません。 |
ArchiveFile | アーカイブ・ファイル名を指定します。これは必須です。 |
MemberName ... | 個々のアーカイブ・メンバーの名前。 |
終了状況
このコマンドは次の終了値を戻します。
項目 | 説明 |
---|---|
0 | 正常終了。 |
>0 | エラーが発生しました。 |
例
- ライブラリーを作成するには、次のように入力します。
lib.a ライブラリーが存在しない場合は、このコマンドはそのライブラリーを作成し、ファイル strlen.o および strcpy.o のコピーをそこに入れます。 lib.a ライブラリーが存在している場合は、このコマンドは、重複メンバーの有無を検査しないで、新しいメンバーを最後に追加します。v フラグは詳細モードを設定します。このモードでは、ar コマンドは進行中に進行状況レポートを表示します。ar -v -q lib.a strlen.o strcpy.o
- ライブラリーの内容テーブルを出力するには、次のように入力します。
このコマンドは、lib.a ライブラリーの内容のテーブルを出力します。ls -l コマンドの出力に似た長形式のリストが表示されます。メンバー・ファイル名だけを出力するには、-v フラグを省略します。ar -v -t lib.a
- ライブラリー内でメンバーを置換したり、新しいメンバーを追加したりするには、次のように入力します。
このコマンドは、メンバー strlen.o および strcat.o を置換します。 lib.a が例 1 に示したように作成されている場合は、strlen.o メンバーが置換されます。strcat.o という名前のメンバーが存在していないので、そのメンバーがライブラリーの終わりに追加されます。ar -v -r lib.a strlen.o strcat.o
- 新しいメンバーを挿入する位置を指定するには、次のように入力します。
このコマンドは、strcmp.o ファイルを追加し、strlen.o メンバーの前に新しいメンバーを配置します。ar -v -r -b strlen.o lib.a strcmp.o
- 変更されたメンバーを更新するには、次のように入力します。
このコマンドは既存の strcpy.o メンバーを置換します。ただし、この置換が行われるのは、ファイル strcpy.o を最後にライブラリーに追加した後で、このファイルを修正した場合だけです。ar -v -r -u lib.a strcpy.o
- ライブラリー・メンバーの順序を変更するには、次のように入力します。
このコマンドは、メンバー strcat.o および strcpy.o を、strcmp.o メンバーの直後の位置に移動します。strcat.o メンバーと strcpy.o メンバーの相対的な順序は変わりません。つまり、strcpy.o メンバーが strcat.o メンバーより前にあったとすれば、移動後もその順序は変わりません。ar -v -m -a strcmp.o lib.a strcat.o strcpy.o
- ライブラリー・メンバーを抽出するには、次のように入力します。
このコマンドは、メンバー strcat.o および strcpy.o を、それぞれ、strcat.o および strcpy.o という名前のファイルにコピーします。ar -v -x lib.a strcat.o strcpy.o
- メンバーを抽出し名前を変更するには、次のように入力します。
このコマンドは、メンバー strcpy.o を stringcopy.o という名前のファイルにコピーします。ar -p lib.a strcpy.o >stringcopy.o
- メンバーを削除するには、次のように入力します。
このコマンドは、lib.a ライブラリーからメンバー strlen.o を削除します。ar -v -d lib.a strlen.o
- ld コマンドにより作成した複数の共用モジュールからアーカイブ・ライブラリーを作成するには、次のように入力します。
このコマンドは、shrsub.o、shrsub2.o、 shrsub3.o などのように命名された共用モジュールから、 libshr.a という名前のアーカイブ・ライブラリーを作成します。libshr.a アーカイブ・ライブラリーを使って main プログラムをコンパイルしリンクするには、次のコマンドを使います。ar -r -v libshr.a shrsub.o shrsub2.o shrsub3.o ...
これで、main プログラムは実行可能になります。libshr.a アーカイブ・ライブラリー内にあり、main プログラムによって参照されているすべての記号に、据え置き解決のためのマークが付けられています。-l フラグは、libshr.a ライブラリーから記号を検索することを指定しています。cc -o main main.c -L/u/sharedlib -lshr
- lib.a の内容を出力する (ただし 32 ビットのオブジェクト・ファイルは無視する) には、次のように入力します。
ar -X64 -t -v lib.a
- lib.a から 32 ビットのオブジェクト・ファイルを抽出するには、次のように入力します。
ar -X32 -x lib.a
- 32 ビット、64 ビット、さらに非オブジェクトも含めて、lib.a 内のすべてのファイルを出力するには、次のように入力します。
ar -X32_64 -t -v lib.a
ファイル
項目 | 説明 |
---|---|
/tmp/ar* | 一時ファイルが入っています。 |