本文に進む 日本−日本語
日本HPホーム 製品とサービス お客様サポート/ ダウンロード ソリューション ご購入の方法
≫ お問い合わせ
詳細検索オプション
日本HPホーム
HP-UX リファレンス: セクション 4 : ファイルフォーマット > a

ar(4)

HP-UX 11i Version 2: September 2004
≫ 

テクニカル ドキュメント

PDF版
フィードバック
ここから本文が始まります

 ≫ 目次

 ≫ 索引

名称

ar ― 共通アーカイブファイル フォーマット

構文

#include <ar.h>

説明

ar コマンドは、複数のファイルを連結し、 アーカイブファイルを作ります ( ar(1) を参照)。 アーカイブは、主にリンクエディタ ( ld(1) を参照) によって探索されるライブラリとして用いられます。

すべてのアーカイブは アーカイブマジック文字列 から始まります。

#define  ARMAG   "!<arch>\n"      /* magic string */
#define  SARMAG  8                /* length of magic string */

アーカイブマジック文字列の次に、 アーカイブファイル メンバーがあります。 各ファイルメンバーの前には、 次のようなフォーマットのファイルメンバー ヘッダがあります。

#define  ARFMAG       "\`\n"    /* header trailer string */
#define  AR_NAME_LEN  16       /* ar_name size, includes `/' */
 
struct ar_hdr   /* archive file member header - printable ascii */
{
    char    ar_name[16];    /* file member name - `/' terminated */
    char    ar_date[12];    /* file member date - decimal */
    char    ar_uid[6];      /* file member user id - decimal */
    char    ar_gid[6];      /* file member group id - decimal */
    char    ar_mode[8];     /* file member mode - octal */
    char    ar_size[10];    /* file member size - decimal */
    char    ar_fmag[2];     /* ARFMAG - string to end header */
};

ファイルメンバー ヘッダの中にある情報は すべて、印字可能な ASCII 形式の 文字列です。 ヘッダの中の数字の情報は、 10 進数で格納されています。 ( ar_mode は例外で、これは 8 進数です)。 したがって、プリント可能なファイルを含むアーカイブは、 アーカイブ全体がプリント可能です。

ar_name フィールドの内容はスラッシュ (/) で終わり、空白で埋められます。 ar_date フィールドは、 ファイルがアーカイブに入れられた時点での、 そのファイルの変更時間です。 移植可能な アーカイブコマンド ar が使われている限り、 共通フォーマットアーカイブは システムからシステムに移すことができます。 古いバージョンの ar は共通アーカイブフォーマットを 使っていないこと、そして、そのアーカイブは 共通アーカイバーで読み書きできないことに注意してください。

すべてのアーカイブファイル メンバーは、 偶数バイト境界から始まっている必要があります。 もし必要なら、ファイルメンバーの間には、ニューライン文字 が挿入されます。 しかし、パディングされていてもファイルのサイズは、 実際のファイルのサイズを正確に反映しています。

アーカイブファイルの空の 部分に関しては、何も規定されていません。 アーカイブ シンボルテーブルが存在した場合、 そのアーカイブの最初のファイルは、 長さ 0 の名前を持っています (すなわち、 ar_name[0] == '/' および ar_name[1] == ' ' となっています)。 このアーカイブメンバーの内容は 機種に依存しています。 詳しくは、該当する a.out(4) マニュアルエントリーを参照してください。

オブジェクトファイル (a.out(4) を参照) を格納しているアーカイブ は、アーカイブ シンボルテーブル を持っている場合があります。 このシンボルテーブルは リンクエディタ (ld(1) を参照) がリンクエディットの処理を行っている時に、 どのアーカイブメンバーをロードする必要があるか を判断するのに使われます。 アーカイブ シンボルテーブルは、(もし存在するなら) 常にアーカイブ の中の最初のメンバーになっています (しかしリストされることはありません)。 そしてこのテーブルは、(ar によって自動的に生成され、アップデートされます。

アーカイブ内に 16 バイト以上のファイル名を持つメンバーが存在する場合、アーカイブには、長いファイル名の文字列テーブルを保存するための特殊なメンバーも含まれています。特殊な文字列テーブルメンバーの名前はゼロバイトで、 ar_name[0] == '/' および ar_name[1] == '/' です。

特殊な文字列テーブルが存在する場合、あらゆる通常のアーカイブメンバーよりも 優先的に使われます。シンボルテーブル メンバーと文字列テーブルメンバーが存在する場合は、必ずシンボルテーブル メンバーが優先的に使われます。

文字列テーブルの各エントリーの後には、スラッシュと改行文字が続きます。 テーブルのオフセットはゼロから開始します。アーカイブメンバーの名称 が 16 バイト以上の場合、メンバーのヘッダ内のエントリ ar_name には名称が含まれず、代わりに、スラッシュの後に文字列テーブルとのオフセットが 記述されたものが含まれます。

例えば、メンバー名が thisverylongfilename.o の場合、ar_name フィールドには /0 が含まれます。この値は、文字列テーブルとのオフセットを表します。 メンバー名が yetanotherlongfilename.o の場合、ar_name フィールドには /27 が含まれます。 長い名称の文字列テーブルのフォーマットは以下のとおりです。

  +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 
0 t|h|i|s|i|s|a|v|e|r|
10 y|l|o|n|g|f|i|l|e|n|
20 a|m|e|.|o|/|\n|y|e|t|
30 a|n|o|t|h|e|r|l|o|n|
40 g|f|i|l|e|n|a|m|e|.|
50 o|/|\n|              

参照

システムツール:

ar(1) 

アーカイブされたライブリの作成

ld(1) 

リンクエディタの起動

その他:

a.out(4) 

アセンブラ, コンパイラ, およびリンカの出力

magic(4) 

HP-UX で実行するためのマジックナンバ

ranlib(1) 

アーカイブ シンボルテーブルの生成

strip(1) 

オブジェクトファイルからのシンボルおよび行番号情報の削除

注意

strip は、アーカイブからアーカイブシンボル テーブルメンバーを取り除きます ( strip(1) を参照)。 リンクエディタ ld でそのアーカイブを使うには、その前に -ts オプションをつけた ar コマンドまたは ranlib(1) によって、 アーカイブ テーブルエントリーを復元する必要があります。

印刷用画面へ
プライバシー 本サイト利用時の合意事項
© 1983-2004 Hewlett-Packard Development Company, L.P.