DLL および LIB ファイルとは何か、またその理由は? 質問する

DLL および LIB ファイルとは何か、またその理由は? 質問する

DLL と LIB については、プログラムが適切に実行されるために必要な重要なコード (ライブラリ) が含まれているということ以外ほとんど知りません。しかし、コンパイラはなぜそれらを生成するのでしょうか? すべてのコードを 1 つの実行可能ファイルに含める方が簡単ではないでしょうか? また、DLL と LIB の違いは何でしょうか?

ベストアンサー1

静的ライブラリ (LIB) と動的ライブラリ (DLL) がありますが、.LIB ファイルは静的ライブラリ (オブジェクト ファイルを含む) またはインポート ライブラリ (リンカーが DLL にリンクできるようにするシンボルを含む) のいずれかになることに注意してください。

ライブラリは、多くのプログラムで使用したいコードがある場合に使用されます。たとえば、文字列の文字数をカウントする関数を作成すると、その関数は多くのプログラムで役立ちます。その関数が正しく動作するようになったら、使用するたびにコードを再コンパイルする必要はありません。そのため、その関数の実行可能コードをライブラリに配置し、リンカーがコンパイルされたコードを抽出してプログラムに挿入できるようにします。このため、静的ライブラリは「アーカイブ」と呼ばれることもあります。

ダイナミック ライブラリは、これをさらに一歩進めます。各プログラムでライブラリ関数の複数のコピーがスペースを占めるのは無駄に思えます。なぜ、それらすべてが関数の 1 つのコピーを共有できないのでしょうか。これがダイナミック ライブラリの目的です。コンパイル時にプログラムにライブラリ コードを組み込むのではなく、メモリにロードされるときにプログラムにマッピングすることで実行できます。同時に実行され、同じ関数を使用する複数のプログラムはすべて 1 つのコピーを共有できるため、メモリを節約できます。実際、コードのパスに応じて、必要な場合にのみダイナミック ライブラリをロードできます。印刷を行わない場合は、プリンタ ルーチンがメモリを占有しても意味がありません。一方、これは、プログラムが実行されるすべてのマシンにダイナミック ライブラリのコピーをインストールする必要があることを意味します。これにより、独自の問題が発生します。

たとえば、C で書かれたほとんどすべてのプログラムは、C ランタイム ライブラリと呼ばれるライブラリの関数を必要としますが、すべての関数を必要とするプログラムはほとんどありません。C ランタイムには静的バージョンと動的バージョンの両方があるため、特定のニーズに応じてプログラムが使用するバージョンを決定できます。

おすすめ記事