268

ファイルが一種の動的ライブラリであることは知ってい.soます (多くのスレッドがそのようなライブラリを共有できるため、メモリ内にそのコピーを複数持つ必要はありません)。.aしかし、との違いは何.laですか? これらはすべて静的ライブラリですか?

動的ライブラリが静的ライブラリよりも大きな利点がある場合、なぜ静的ライブラリがまだたくさんあるのでしょうか? .soまたはにコードをビルドしようとするのはいつ.aですか?

[mirror@home ins_openvpn]$ ls lib/openvpn/plugins/ -l
total 96
-rw-r--r-- 1 mirror mirror 22892 Sep  2 23:25 openvpn-plugin-auth-pam.a
-rwxr-xr-x 1 mirror mirror   931 Sep  2 23:25 openvpn-plugin-auth-pam.la
-rwxr-xr-x 1 mirror mirror 23621 Sep  2 23:25 openvpn-plugin-auth-pam.so
-rw-r--r-- 1 mirror mirror 17228 Sep  2 23:25 openvpn-plugin-down-root.a
-rwxr-xr-x 1 mirror mirror   932 Sep  2 23:25 openvpn-plugin-down-root.la
-rwxr-xr-x 1 mirror mirror 18805 Sep  2 23:25 openvpn-plugin-down-root.so
4

2 に答える 2

350

.soファイルは動的ライブラリです。接尾辞は「共有オブジェクト」を表します。これは、ライブラリにリンクされているすべてのアプリケーションが、結果の実行可能ファイルにコピーを作成するのではなく、同じファイルを使用するためです。

.aファイルは静的ライブラリです。接尾辞は「アーカイブ」を表します。これは、実際には、元の .o オブジェクト ファイルの単なるアーカイブ (arコマンドで作成されたものであり、その前身はライブラリを作成するために使用されるだけです) であるためです。tar

.laファイルは、対応するライブラリを構成するファイルを記述するために GNU "libtools" パッケージで使用されるテキスト ファイルです。それらについての詳細は、この質問で見つけることができます: libtool の .la ファイルは何のためにありますか?

静的ライブラリと動的ライブラリには、それぞれ長所と短所があります。

静的プロ: ユーザーは、アプリケーションでテストしたライブラリのバージョンを常に使用するため、予期しない互換性の問題は発生しません。

静的な短所: ライブラリで問題が修正された場合、それを利用するにはアプリケーションを再配布する必要があります。ただし、ユーザーが自分で更新する可能性が高いライブラリでない限り、とにかくこれを行う必要があるかもしれません。

ダイナミック プロ: ライブラリに使用されるメモリは、ライブラリを使用するすべてのプロセス間で償却されるため、プロセスのメモリ フットプリントが小さくなります。

動的プロ: ライブラリは実行時にオンデマンドでロードできます。これはプラグインに適しているため、ソフトウェアのコンパイルおよびインストール時に使用するプラグインを選択する必要はありません。新しいプラグインをその場で追加できます。

動的な短所: 誰かがアプリケーションをインストールしようとしているシステムにライブラリが存在しないか、アプリケーションと互換性のないバージョンを使用している可能性があります。これを軽減するために、必要に応じてインストールできるように、アプリケーション パッケージにライブラリのコピーを含める必要がある場合があります。これは、多くの場合、必要な依存関係をダウンロードしてインストールできるパッケージ マネージャーによって軽減されます。

動的な短所: 通常、リンク時の最適化は不可能であるため、高性能アプリケーションでは効率に影響する可能性があります。WPO と LTOに関するウィキペディアの議論を参照してください。

動的ライブラリは、 などのシステム ライブラリに特に役立ちますlibc。カーネル インターフェイスが変更されたため、これらのライブラリには、多くの場合、特定の OS とバージョンに依存するコードを含める必要があります。プログラムを静的システム ライブラリにリンクすると、そのライブラリ バージョンが作成された OS のバージョンでのみ実行されます。ただし、動的ライブラリを使用すると、実行しているシステムにインストールされているライブラリが自動的に選択されます。

于 2012-09-02T16:16:29.240 に答える