web-dev-qa-db-ja.com

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

私が理解している限り、それらはライブラリですが、2つの違いは何ですか?

70
Erik B

.aファイルは静的ライブラリですが、.soファイルは、WindowsのDLLに類似した共有オブジェクト(動的)ライブラリです。2つのこのページ

55
ajk

続いて、.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を実行してみます。 (残念ながら、この最後の部分は、より新しいシステムでは機能しないようです。大きな損失ではありません。)

29
Hack Saw