この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)
出典検索?: "Ar" UNIX
UNIXにおけるarchiver(単にarとしても知られる)とは、複数のファイルを一つのアーカイブにまとめるユーティリティである。こんにちにおいて、.mw-parser-output .monospaced{font-family:monospace,monospace}arは、一般にリンカが使用する静的リンクされたライブラリの生成や更新にのみ利用される。すなわち、arは任意の目的でアーカイブの生成に利用できるが、静的ライブラリの作成を除いてその用途をほとんどtarに取って代わられた。arはGNU Binutilsに含まれるプログラムである。 arのファイルフォーマットは一度も標準化されたことがない。現代的なアーカイブは2つの良く知られた派生物で利用される共通フォーマットが基になっている。すなわちBSDとGNUである。 歴史的には、その他変種も存在し、例えばAIX[1]にはSmall[2]、Big[3]そして"Coherent"と3つの形式があり、いずれもBSD・GNU共通形式とは全く異なったフォーマットである。 Debian系Linuxディストリビューションのパッケージである".deb"はBSD・GNU共通フォーマットを採用したarアーカイブである。 arが生成するアーカイブの先頭データにはグローバルヘッダが存在し、その後他ヘッダと格納ファイル本体のデータセクションが続く。 データセクションは2バイト毎に切り詰められる。仮にオフセットが奇数で終端をむかえた場合、'\n'が詰め物として利用される。 Win32以降のMicrosoft Windowsの開発環境のライブラリファイル(.lib)も内部的にarフォーマットを使用している。 グローバルヘッダはマジックアスキー文字列"!<arch>"を含む単一のフィールドであり、その後、制御文字である単一のラインフィード(LF)が続く。 以下のような共通フォーマットを持つ。 フィールドの開始オフセットフィールドの終了オフセットフィールド名フィールドフォーマット ファイル名の長さやフォーマットの制限により、GNUとBSDの派生双方で長いファイル名を格納する方法(ただし両者で異なる)が開発されている。 BSD arは、文字列"#1/"を配置し、このことにより拡張されたファイル名を格納できる。この文字列の後にファイル名のフィールドにあるファイル名の長さのデータが続き、さらにファイルヘッダの実ファイル名が添加される。 GNU arは"//"という名前のレコードを持ち、ファイルのデータセクション上に複数の拡張型ファイル名を格納している。このレコードは将来のヘッダ参照用に確保されている。ヘッダは、レコード"/"の格納によって拡張されたファイル名を参照する。このレコードの後に拡張ファイル名データセクション上に存在するファイル名の先頭十進オフセットが続く。この"//"ファイルのフォーマット自体は単なるロングファイルネームのリストである。各フィールドは1つ以上の文字列LFによってそれぞれ分離される。十進オフセットは文字数であり、"//"ファイル内にある行数や文字列数ではないことに注意しておきたい。 GNU arは'/'をファイル名の終端と認識する。すなわち、これを利用すれば拡張ファイル名を利用することなく、スペースを使用することができる。 GNU arは特殊なファイル名"/"を利用することにより、その直後のデータエントリにarライブラリのアクセス速度を向上するのに利用されるシンボルルックアップテーブルを含めることができる。このシンボルテーブルは隣接データとして同時に記録される以下3つの部分からなる。 特殊なファイル"/"は、特定の終端文字列を持たない。最後のシンボル名がひとたび読み込まれれば、そこで終了すると仮定される。 別のコマンドとしてranlibというものがある。これはar sを実行した場合と完全に等価である。すなわちシンボルルックアップテーブルを追加するだけのコマンドである。 例えば、ファイルclass1.o, class2.o, class3.oからなるアーカイブを作成するには、次のコマンドを実行する。ar rcs libclass.a class1.o class2.o class3.o class1.o, class2.o, and class3.oに依存するプログラムをコンパイルするには次を実行する。cc main.c libclass.a 以上が静的リンクの方法だが、以下のようにライブラリを作成することなくプログラムにコンパイルすることもよく行われる。cc main.c class1.o class2.o class3.o
ファイルフォーマットの詳細
グローバルヘッダ
ファイルヘッダ
015ファイル名ASCII
1627ファイル改変時のタイムスタンプ十進数
2833UID十進数
3439GID十進数
4047ファイルモード八進数
4857ファイルサイズ(バイト)十進数
5859マジックナンバー0x60 0x0A
BSDの派生版
GNUの派生版
32ビットビッグエンディアン整数で与えられるテーブル上のエントリー数
32ビットビッグエンディアン整数の集まり。各シンボル毎に、シンボルを含むファイル用のヘッダのアーカイブ内の位置を1つずつ記録する。
終端が0である文字列の集まり。それぞれシンボル名であり、2番目のデータにある位置のリストとして、同一の順番から成る。
使用例
脚注^ “ ⇒ar Command”. IBM. 2011年5月27日閲覧。
^ “ ⇒ar File Format (Small)”. IBM. 2011年5月27日閲覧。
^ “ ⇒ar File Format (Big)”. IBM. 2011年5月27日閲覧。
関連項目
.deb
アーカイブフォーマット
UNIXユーティリティの一覧
外部リンク
ar: create and maintain library archives ? The Open Group基本仕様書第7号2018年版「シェル及びユーティリティ」
ar(1)
Manpage of ar
FreeBSDマニュアルページ
UNIX Seventh Editionのar用マニュアルページ
The 32-bit PA-RISC Run-time Architecture Document, HP-UX 11.0 Version 1.0, Hewlett-Packard, 1997.
Chapter 4: Relocatable Librariesを参照のこと。オンラインでは ⇒[1]が利用可能(devresource.hp.com、PDF)。
ranlib(1)
Manpage of ranlib
表
話
編
歴
アーカイブファイルフォーマット(比較)
アーカイブのみ
ar
AXF
BagIt(英語版)
cpio
LBR(英語版)
shar(英語版)
tar
WAD
圧縮のみ