私が理解している限り、これらはライブラリですが、2つの違いは何ですか?
コメント
- 関連記事- .so、.la、.aライブラリの違い'ファイル?
回答
A .a
ファイルは静的ライブラリですが、.so
ファイルはWindowsのDLLに似た共有オブジェクト(動的)ライブラリです。 このページ 。
コメント
-
.a
はプログラムの一部としてのみ含めることができますコンパイル中。.so
'は"インポート可能"プログラムのロード中。 - .aは何の略ですか?
- @hfrmobileaはアーカイブの略です-静的ライブラリは
ar
ユーティリティを使用して作成されたオブジェクトファイルのコレクション。詳細はこちら
回答
以下のように、.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
と呼ぶかどうかわかりません。 - それ' execが検索するためのメインシンボルがあるという意味での本格的なプログラム。
- .so
ldd
を実行することもできます。 div id = “7d6c8d4b54″>
で、使用している他のライブラリが表示されます。 Staticは、'はダイナミックライブラリではないというメッセージとともに返されます。