.aファイルと.soファイルの違いは何ですか?


回答:


54

.a中にファイルは、静的なライブラリである.soファイルは、Windows上のDLLに似た共有オブジェクト(動的)ライブラリです。このページの 2つの違いに関する詳細情報があります


18
.aコンパイル中にプログラムの一部としてのみ含めることができます。 .soをプログラムの読み込み中に「インポート」できます。
ローレンス

2
.aは何を表していますか?
hfrmobile

2
@hfrmobileはアーカイブのです -静的ライブラリは、arユーティリティを使用して作成されたオブジェクトファイルのコレクションです。ここでは詳細情報
AJK

28

次のように、.aファイルは「ar」アーカイブです。tarアーカイブとは異なり、.oまたはオブジェクトファイルを保存します。これらのファイルをアーカイブから引き出したり、プログラムにリンクしたりすることができます。必要に応じて、arを使用して他のファイルを保存できます。

たとえば、-tパラメーターを使用してarファイルのメンバーのリストを取得できます。

ar -t /usr/lib/libc.a

.soファイルは「共有オブジェクト」ファイルであり、リンカがより多くの情報を使用できるため、メンバーをできるだけ早くロードプログラムにリンクできます。

例えば、試してみてください:

objdump -T /lib/libc-2.11.1.so

(または/ libディレクトリにあるlibc.soのバージョン。).soファイルには、他の場所でファイルを検索するか、他の何かを使用するように指示するリンカースクリプトを含めることもできます。

興味深いことに、.soファイルも本格的なプログラムです。たとえば、/ lib/libc.so.6を実行してみます。(悲しいことに、この最後の部分は、より新しいシステムでは動作しないようです。それは大きな損失ではありません。)


打ち間違え。あなたは書くことを意味しますar -t /usr/lib/libc.a-この場合、実際には必要ないようです。また/lib/libc.so.6.、出力を出力するだけです。私はそれをと呼ぶかどうかわからないfull fledged program
ファヒムミタ

1
これは、execが見つけるための主要なシンボルを持っているという意味で、本格的なプログラムです。
ハックソー

2
ldd.soで実行することもでき、それが使用する他のライブラリを表示します。Staticは、動的ライブラリではないというメッセージを返します。
マーチン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.