[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

1. ar

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=binutils-ja&node=ar"
"binutils/ar"へのコメント(無し)

 
ar [-]p[mod [relpos] [count]] archive [member...]
ar -M [ 

GNU arは,アーカイブの作成,変更,そして,それからの抽出 を行います.アーカイブ(archive)とは,(アーカイブのメンバー (members)と呼ばれる)元となる個々のファイルを取り出すことが可能な構造の ファイル中に,他のファイルの集合を保持している単一のファイルです.

元のファイルの内容,モード(許可),タイムスタンプ,所有者,そしてグルー プは,アーカイブに保存されていて,抽出時に復元することが可能です.

GNU arは,任意の長さのメンバー名のアーカイブを管理するこ とが可能です.しかし,arがシステムでコンフィグレーションされ た方法に依存し,他のツールで管理されるアーカイブのフォーマットの互換性 のため,メンバー名の長さは制限される可能性があります.それが存在する場 合,制限は15文字(a.out に関連するフォーマットの典型)や16文字(coffに関連 するフォーマットの典型)のことが多いでしょう.

この種のアーカイブは,一般に必要なサブルーチンを保持するライブラリ (libraries)として最もよく使用されるので,arは,バイナリユー ティリティと考えられます.

arは,修飾子`s'を指定したとき,アーカイブの再配置可能な オブジェクトモジュールに定義されているシンボルに索引を作成します.一度 作成されると,(`q'更新コマンドでの保存で)arがその内容を 変更したときは,アーカイブ内で毎回この索引が更新されます.そのような索 引をもつアーカイブは,ライブラリとのリンク速度を上げ,ライブラリのルー チンがアーカイブ内の位置に関わらず,お互いの呼び出しを可能にします.

この索引テーブルをリストアップするため,`nm -s'や`nm --print-armap'を使用してもかまいません.アーカイブに表が無い場合, ranlibと呼ばれるarの別の形式を,表に加えるために使 用することが可能です.

GNU arは,二つの異なる機能を用いて互換性があるように設計 されています.Unixシステム上の様々な形態のarのように,コマン ドラインオプションを使用してその作業を制御することが可能です.また,単 一のコマンドラインオプション`-M'を指定した場合,MRI "librarian"プログラムのように,標準入力を通じて供給されるスクリプトを 用いて,それを制御することが可能です.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

1.1 コマンドラインでのarの制御

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=binutils-ja&node=ar%20cmdline"
"binutils/コマンドラインでのarの制御"へのコメント(無し)

 
ar [`-X32_64'] [`-']p[mod [relpos] [count]] archive [member...]

Unix形式でarを使用するとき,arは少なくとも二つの引 数を実行時に要求します.operationを指定するキー文字 (modifiersを指定するその他のキー文字がオプションで付きます)と, 動作対象のアーカイブ名です.

ほとんどの処理は,それ以外にmember引数を受け入れ,それは処理の対 象となる特定のファイル名を指定します.

GNU arでは,最初のコマンドライン引数内で,処理コード pと修飾フラグmodを,任意の順序で混ぜることが可能です.

好みにより,最初のコマンドライン引数をダッシュで始めてもかまいません.

pキー文字は,実行する処理を指定します.それは以下のいずれでもかま いませんが,その中の一つだけを指定する必要があります.

`d'
アーカイブからモジュールを削除します.削除するモジュール名は, member...として指定してください.削除するファイルを指定してい ない場合,アーカイブはそのままです.

`v'修飾子を指定した場合,arは削除するそれぞれのモジュー ルをリストアップします.

`m'
アーカイブ内でメンバーを移動するためにこの処理を使用してください.

シンボルが一つ以上のメンバーで定義されている場合,アーカイブ内のメンバー の順序で,ライブラリを使用してプログラムがリンクされる方法に差異が発生 するはずです.

修飾子を使用しないでmを使用する場合,member引数で指名した すべてのメンバーは,アーカイブの終りに移動されます.そうする代わ りに,指定した位置にそれらを移動するために,`a',`b',または `i'修飾子を使用することが可能です.

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

member引数を指定していない場合,アーカイブのすべてのファイルが出 力されます.

`q'
すばやく追加します.歴史的に,ファイルmember...archiveの終りに,置換に関する調査をせずに追加します.

修飾子`a',`b',そして`i'は,このオプションに効果は ありません.新しいメンバーは常にアーカイブの終りに配置されます.

修飾子`v'で,arは追加されるそれぞれのファイルをリストアッ プします.

この処理の要点は速度なので,アーカイブのシンボル表の索引が存在している 場合でも更新されません.シンボル表の索引を更新するために,`ar s' またはranlibを明示的に使用することが可能です.

しかし,あまりに多くの様々なシステムで,高速追加が索引を再構築すること を仮定されていので,GNU arは,qrの同義語 として実装されています.

`r'
ファイルmember...archiveに挿入します(置換を用 います).この処理は,追加されるものと名前が一致した場合,既存のメンバー が削除される点で,`q'とは異なります.

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

デフォルトで,新しいメンバーはファイルの終りに追加されます.しかし,既 存のメンバーとの相対位置を要求するため,修飾子`a',`b',また は`i'の一つを使用してもかまいません.

この処理で修飾子`v'を使用すると,挿入されたそれぞれのファイルを出 力の一行に書き出し,ファイルが追加された(古いメンバーが削除されていな い)のか,置換されたのかを示す文字`a'または`r'のどちらかを追加 します.

`t'
archiveの内容をリストアップしている,または,アーカイブ に存在するmember...にリストアップされているファイルの を表示します.通常,メンバー名だけが表示されます.モード(許可), タイムスタンプ,所有者,そして大きさも見たい場合,`v'修飾子を指定 して要求することも可能です.

memberを指定しない場合は,アーカイブ内のすべてのファイルがリスト アップされます.

同じ名前の(`fie'という名の)ファイルが,(`b.a'をいう名の)アー カイブに一つ以上ある場合,`ar t b.a fie'は最初のインスタンスのみリ ストアップします.すべてを見るために,完全なリストを要求する必要があり ます -- この例では`ar t b.a'です.

`x'
(memberという名の)メンバーをアーカイブから抽出します. arが抽出しているそれぞれの名前をリストアップするように,この 処理で`v'修飾子を使用することが可能です.

memberを指定しない場合,アーカイブのすべてのファイルが抽出されま す.

処理の動作の変更を指定するため,いくつかの修飾子(mod)をpキー 文字の直後に続けてもかまいません.

`a'
新しいファイルを,アーカイブの既存のメンバーのに追加します.修 飾子`a'を使用した場合,archive指定の前に,既存のアーカイブメ ンバー名がrelpos引数にある必要があります.

`b'
新しいファイルをアーカイブの既存のメンバーのに加えます.修飾子 `b'を使用した場合,archive指定の前に,既存のアーカイブメンバー 名がrelpos引数にある必要があります.(`i'と同じです).

`c'
アーカイブを作成します.更新の要求をしたとき,指定された archiveが存在する場合でも,それは常に作成されます.しかし,この修 飾子を使用して,作成することを期待するということを前もって指定しない場 合,警告が生じます.

`f'
アーカイブで名前を切り詰めます.GNU arは,通常は任意の長 さのファイル名を許可します.これは,いくつかのシステムのネイティブ arプログラムと互換性のないアーカイブを作成します.これが懸念 される場合,アーカイブに配置するときファイル名を切り詰めるために, `f'修飾子を使用してもかまいません.

`i'
新しいファイルをアーカイブの既存のメンバーの前に挿入します.修飾 子`i'を使用する場合,archive指定の前に,既存のアーカイブメン バー名前がrelpos引数にある必要があります.(`b'と同じです).

`l'
この修飾子は受け入れられますが,使用されません.

`N'
countパラメータを使用します.これは,同じ名前のアーカイブに,複数 のエントリーがある場合に使用されます.アーカイブから,該当する名前のイ ンスタンスをcount個,抽出または削除します.

`o'
メンバーが既存のとき,そのオリジナルの日付を保持します.この修飾 子を指定しない場合,アーカイブから抽出されるファイルは,抽出した時間で タイムスタンプがつきます.

`P'
アーカイブの名前の一致にフルパス名を使用します.GNU ar はフルパス名を持つアーカイブ(そのようなアーカイブは,POSIXで問題ない) を作成することは不可能ですが,アーカイブを作成するものには,そうするこ とが可能なものもあります.このオプションで,GNU arはフル パス名を使用しているファイル名にマッチし,それは,他のツールで作成され たアーカイブから単一のファイルを抽出するとき便利でしょう.

`s'
他の変更がアーカイブに対してなされない場合でも,オブジェクトファイルの 索引をアーカイブに書き出したり,既存のものを更新したりします.この修飾 子フラグは,任意のオプションとともに,または単独で使用してもかまいませ ん.アーカイブで`ar s'を実行することは,`ranlib'の実行と等価 です.

`S'
アーカイブシンボル表を生成しません.これで何段階か使用する大きなライブ ラリの構築を高速にすることが可能です.結果として出力されるアーカイブは, リンカで使用することは不可能です.シンボルテーブルを構築するために, `ar'の最後の実行で`S'修飾子を省略したり,アーカイブで `ranlib'を実行する必要があります.

`u'
通常,`ar r'...でリストアップされているすべてのファイルをアー カイブに挿入します.リストアップしたもので,同じ名前の既存のメンバーよ り新しいファイルのみ挿入したい場合,この修飾子を使用してください. `u'修飾子は,処理`r'(置換)に対してのみ可能です.特に,タイム スタンプの調査が処理`q'での速度の利点を損なうため,`qu' と組 み合わせることはできません.

`v'
この修飾子は,処理の冗長バージョンを要求します.多くの処理は,修 飾子`v'が追加されているとき,処理しているファイル名のような追加の 情報を表示します.

`V'
この修飾子はarのバージョンナンバーを表示します.

arは,AIXに対する互換性のため,`-X32_64'と綴られた最初の オプションを無視します.このオプションによって引き起こされる動作は, GNU arのデフォルトです.arは,その他の `-X'オプションを全くサポートしません.特に,AIX arではデ フォルトとなる`-X32'はサポートしません.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

1.2 スクリプトを用いたarの制御

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=binutils-ja&node=ar%20scripts"
"binutils/スクリプトを用いたarの制御"へのコメント(無し)

 
ar -M [ <script ]

単一のコマンドラインオプション`-M'をarで用いた場合,基 礎的なコマンド言語でその処理を制御することが可能です.arのこ の形式は,標準入力が端末から直接来ている場合,対話的に処理します.対話 的に使用している間,arは入力を促し(プロンプトは`AR >'), エラー後も実行を続けます.標準入力をスクリプトファイルにリダイレクトし ている場合,プロンプトは表示されず,arはエラーが発生すると(ゼ ロでない終了コードで)実行を終了します.

arコマンド言語は,コマンドラインオプションと等価に設計されて いません.実際,それはアーカイブ上の制御が若干少なくなっています. コマンド言語の目的は,MRI "librarian"プログラムに対して書かれたスクリ プトを既に所有している開発者が,GNU arへの変換をより簡単 にすることです.

arコマンド言語の構文は簡単です.

以下のものは,arで使用することが可能な,または,ar を対話的に使用しているときのコマンドです.そのうちの三つは特別な意味を 持ちます.

OPENCREATE現在のアーカイブ(current archive)を指 定し,それはそれ以外のほとんどのコマンドが要求する一時的なファイルです.

SAVEは,スクリプトでこれまでに指定された変更をコミットします. SAVEの前のコマンドは,現在のアーカイブの一時的なコピーに対しての み効果があります.

ADDLIB archive
ADDLIB archive (module, module, ... module)
archiveのすべての内容(または,指定されている場合,アーカイブのそ れぞれの指名されたmodule)を,現在のアーカイブに追加します.

OPENCREATEを前もって使用することが要求されます.

ADDMOD member, member, ... member
それぞれの指名されたmemberを,モジュールとして,現在のアーカイブ に追加します.

OPENCREATEを前もって使用することが要求されます.

CLEAR
現在のアーカイブの内容を削除し,最後にSAVEされてからのあらゆる処 理の効果を無効にします.現在のアーカイブが指定されていない場合でも実行 可能です(効果はありません).

CREATE archive
アーカイブを作成し,それを現在のアーカイブにします(その他,多くのコマン ドに対して必要になります).新しいアーカイブは,一時的な名前で作成されま す.それは,SAVEを使用するまで,archiveとして実際に保存さ れません.既存のアーカイブに優先可能です.同様に,指名されている既存の archiveファイルの内容は,SAVEまで破壊されません.

DELETE module, module, ... module
リストアップされているそれぞれのmoduleを,現在のアーカイブから削 除します.`ar -d archive module ... module' と同じです.

OPENCREATEを前もって使用することが要求されます.

DIRECTORY archive (module, ... module)
DIRECTORY archive (module, ... module) outputfile
archiveに存在している指名されたそれぞれmoduleをリストアップ します.別のコマンドVERBOSEで,出力形式を指定します.冗長出力が オフのとき,出力は`ar -t archive module...'のよう になります.冗長出力がオンのとき,リストは`ar -tv archive module...'のようになります.

出力は通常,標準出力に流れていきます.しかし,outputfileを最後の 引数として指定した場合,arはそのファイルに出力を変更します.

END
arを,正しく完了したことを示す終了コード0で終了します. このコマンドは出力ファイルを保存しません.最後のSAVEコマンド以降 に現在のアーカイブを変更した場合.これらの変更は失われます.

EXTRACT module, module, ... module
指名されたそれぞれのmoduleを現在のアーカイブから抽出し,それらを 現在のディレクトリに個別のファイルとして書き出します.`ar -x archive module...'と同じです.

OPENCREATEを前もって使用することが要求されます.

LIST
現在のアーカイブのすべての内容を,VERBOSEの状態に関わらず, "verbose"形式で表示します.効果は`ar tv archive'に似ていま す.(この単独コマンドはGNU ar拡張で,MRI互換に提供されて いるものではありません).

OPENCREATEを前もって使用することが要求されます.

OPEN archive
現在のアーカイブとして使用するために,既存のアーカイブを開きます(他の多 くのコマンドに対し必要です).それに続くコマンドの結果からのあらゆる変更 は,次にSAVEが使用されるまで,archiveに対し実際に効果はあ りません.

REPLACE module, module, ... module
現在のアーカイブで,それぞれの(REPLACEの引数で指名された)既存の moduleを,現在のワーキングディレクトリのファイルで置換します.エ ラー無くこのコマンドを実行するために,ファイルと現在のアーカイブのモ ジュールの両方が存在する必要があります.

OPENCREATEを前もって使用することが要求されます.

VERBOSE
DIRECTORYからの出力を管理している内部フラグを切り替えます.フラ グがオンのとき,DIRECTORY出力は,`ar -tv '...からの出力 に一致します.

SAVE
現在のアーカイブへの変更をコミットし,それを,最後のCREATEOPENコマンドで指定された名前のファイルに,実際に保存します.

OPENCREATEを前もって使用することが要求されます.


[ << ] [ >> ]           [表紙] [目次] [索引] [検索] [上端 / 下端] [?]