A ファイル形式とは?
.a ファイルには、ソフトウェア開発者が使用する システムライブラリ が含まれています。これらのファイルは、Linux や macOS を含む Unix 系システムで一般的に見られます。一方、Microsoft Windows システムでは同じ目的で .LIB ファイル が使用されます。.a ファイルは、ソースファイルから参照できるコンパイル済みの関数やヘッダーを提供します。.a 拡張子を持つライブラリは、一般に 静的ライブラリ と呼ばれます。
.a ファイルは技術的には ar 形式のアーカイブ です。これは、1つ以上のコンパイル済みオブジェクト(.o)ファイルを保持するコンテナです。Linux ではメンバーは ELF 形式の .o ファイルであり、macOS では Mach-O オブジェクトです。すべての .a アーカイブは、8バイトの ASCII シグネチャ !<arch> とそれに続く改行で始まり、ファイル検査ツールで識別できるようになっています。ar t libname.a でアーカイブの内容をリスト表示し、nm libname.a でエクスポートされたシンボルを確認できます。
コンピュータプログラムは、静的ライブラリと動的ライブラリという2種類のリソースライブラリを使用します。静的ライブラリ(.lib または .a)は、リンク時にコードがターゲットプログラムに直接コンパイルされるため、通常、動的ライブラリよりもサイズが大きくなります。動的ライブラリ(Linux では .SO ファイル、macOS では .dylib)は、プログラムの実行時または実行中にプログラムに接続されます。プログラム開発者は、さまざまな動的リンクライブラリと連携するようにコードをカスタマイズできます。
ar ユーティリティ(Linux の GNU Binutils の一部)は、.a アーカイブを作成および保守するための標準ツールです。リンカーは必要なオブジェクトファイルのみを抽出するため、静的ライブラリ内の未使用のコードは最終的な実行ファイルには含まれません。
セキュリティと安全性
リスク: LOW.a ファイルはビルド時のデータであり、OS が直接実行するものではないため、エンドユーザーへの直接的なリスクはほとんどありません。開発者にとっての懸念はサプライチェーンの信頼性です。悪意のある、または改ざんされた静的ライブラリは、そのコードをプログラムに直接リンクさせるため、信頼できる SDK ソースからの .a ファイルのみを使用し、チェックサムや署名を確認してください。Ada ソースの .a ファイルはプレーンテキストであり、開いても無害です。
形式の詳細
概要- Ada ソースコードファイル - 一部の Ada コンパイラやプロジェクトでは、プレーンテキストの Ada ソースに .a(および .ada/.adb/.ads)を使用します。これはレガシーなデータベースに記録されている意味ですが、静的ライブラリとしての用途よりもはるかに一般的ではありません。
A ファイルを開くプログラム
ar t lib.a / nm lib.a を使用します。メンバーは Mach-O オブジェクトです。xcode-select --install でインストールします。 ar t libfoo.a はメンバーをリスト表示し、nm libfoo.a はシンボルをリスト表示し、ar x libfoo.a は .o ファイルを抽出します。.a はリンクされるものであり、開くものではありません。 技術的詳細
詳細仕様| ファイルシグネチャ | バイトオフセット 0 に «!<arch>\n» (16進数: 21 3C 61 72 63 68 3E 0A) |
| アーカイブ形式 | ar (Unix アーカイバ) - Linux、macOS、および BSD システムで共通のコンテナ形式 |
| MIME タイプ | application/x-archive |
| メンバーファイル形式 (Linux) | ELF 再配置可能オブジェクトファイル (.o) |
| メンバーファイル形式 (macOS) | Mach-O 再配置可能オブジェクトファイル (.o) |
| メンバーごとのヘッダーサイズ | 60 バイト - ASCII フィールド: 名前 (16 B)、タイムスタンプ (12 B)、UID (6 B)、GID (6 B)、モード (8 B)、サイズ (10 B)、終了マーカー (2 B) |
| シンボルインデックスメンバー | GNU ar は «/» という名前のメンバーを使用し、BSD/macOS ar は «__SYMDEF» を使用します。高速なリンクのためにシンボル名をメンバーオフセットにマッピングします。 |
| 命名規則 | lib<name>.a - 例: libz.a, libssl.a, libpthread.a。リンカーの -l フラグを使用するには «lib» プレフィックスが必要です。 |
| 圧縮 | なし - メンバーオブジェクトファイルは非圧縮のままそのまま格納されます。 |
| リンク時の動作 | リンカーは未解決のシンボルを満たす .o メンバーのみを抽出します。未使用のメンバーは出力される実行ファイルには含まれません。 |
| 標準作成ツール | ar (Linux では GNU Binutils、macOS では LLVM ar / BSD ar)。実行例: ar rcs libname.a file1.o file2.o |
| シンボル検査ツール | nm - エクスポートされたシンボル、未定義のシンボル、およびローカルシンボルをリスト表示します。例: nm libname.a |
| 内容検査ツール | ar t libname.a はメンバーをリスト表示し、ar x libname.a はそれらを抽出します。objdump / otool はメンバーコードを逆アセンブルします。 |
| Windows での相当品 | .lib 静的ライブラリ (COFF/PE 形式)。MinGW などの Windows クロスコンパイラも .a ファイルを生成します。 |
| 一般的なファイルサイズ範囲 | 数 KB(小さなユーティリティライブラリ)から数百 MB(例: libclang_rt.a や完全な libc.a)まで様々です。 |
| リリース日 | ar archive format from early Unix (1970s); standard static-library extension on Unix/Linux/macOS |
| オープンスタンダード | はい · ロイヤリティフリー |
| 仕様書 | en.wikipedia.org |
A の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。A ファイルについて最初の質問をしてみましょう。
よくある質問
.a ファイルとは何ですか?
.a ファイルを開くにはどうすればよいですか?
ar t lib.a を実行してメンバーをリスト表示するか、nm lib.a を実行してシンボルをリスト表示します。もし .a ファイルが実際には Ada のソースコードである場合は、テキストエディタで開いてください。.a と .so の違いは何ですか?
.a は Windows の .lib と同じですか?
.a から .o ファイルを抽出するにはどうすればよいですか?
ar x libfoo.a (binutils) を実行してオブジェクトメンバーを抽出するか、ar アーカイブに対応している 7-Zip で .a ファイルを開きます。