[解決済み] DLLとLIBファイル - 何が、なぜ?
質問
DLLやLIBについては、プログラムが正しく動作するために必要な重要なコード、つまりライブラリが含まれているということ以外、ほとんど知らない。しかし、なぜコンパイラはDLLやLIBを生成するのでしょうか?すべてのコードを1つの実行ファイルに含める方が簡単ではないでしょうか?また、DLLとLIBの違いは何なのでしょうか?
どのように解決するのですか?
静的ライブラリ(LIB)と動的ライブラリ(DLL)がありますが、.LIBファイルは静的ライブラリ(オブジェクトファイルを含む)またはインポートライブラリ(リンカーがDLLにリンクするためのシンボルを含む)のいずれかになることに注意してください。
ライブラリーを使用するのは、多くのプログラムで使用したいコードがあるためです。例えば、文字列の文字数を数える関数を書いた場合、その関数は多くのプログラムで役に立ちます。そのため、その関数の実行コードをライブラリに置き、リンカはコンパイルされたコードを取り出して、プログラムに挿入することができます。このような理由から、スタティック・ライブラリは「アーカイブ」と呼ばれることがあります。
ダイナミック・ライブラリは、これをさらに一歩進めたものです。ライブラリ関数のコピーが複数あり、それぞれのプログラムの中でスペースを取っているのは無駄なように思えます。1つの関数のコピーを皆で共有することはできないのでしょうか?これを実現するのがダイナミック・ライブラリです。コンパイル時にライブラリのコードをプログラムに組み込むのではなく、メモリに読み込まれた時点でプログラムにマッピングして実行することができるのです。同じ関数を使う複数のプログラムを同時に実行する場合、1つのコピーを共有できるので、メモリを節約することができます。実際、ダイナミックライブラリは、コードのパスに応じて、必要なときだけロードすることができます。印刷をしないのにプリンタルーチンがメモリを消費するのは意味がありません。一方、このことは、プログラムを実行するすべてのマシンにダイナミックライブラリのコピーをインストールする必要があることを意味します。これは、独自の問題点を生み出します。
例えば、「C言語」で書かれたほとんどすべてのプログラムは、「Cランタイムライブラリ」と呼ばれるライブラリから関数を必要としますが、すべての関数を必要とするプログラムはほとんどありません。C言語ランタイムには静的バージョンと動的バージョンがあり、特定のニーズに応じてどちらのバージョンを使用するかを決定することができます。
関連
-
[解決済み】クラスが登録されていないエラー
-
[解決済み] using Interop.SHDocVw.dll この名前空間/DLLはどこにありますか?
-
[解決済み] c# dllの暗号化
-
[解決済み] ActiveXコンポーネントがオブジェクトを作成できない
-
[解決済み] 圧縮(zip)フォルダにファイル/フォルダを送信しようとすると何も起こらない
-
[解決済み] スタティック・ライブラリとシェアード・ライブラリの違い?
-
[解決済み】共有オブジェクト(.so)、静的ライブラリ(.a)、DLL(.so)の違い?)
-
[解決済み】DLLファイルとは一体何ですか?
-
[解決済み】64ビットWindowsで64ビットDLLはSystem32に、32ビットDLLはSysWoW64に入るのはなぜですか?
-
[解決済み] CMakeを使ってDLLファイルを実行ファイルと同じフォルダーにコピーする方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】クラスが登録されていないエラー
-
[解決済み] using Interop.SHDocVw.dll この名前空間/DLLはどこにありますか?
-
[解決済み] c# dllの暗号化
-
WindowsのDLLプログラミングにおけるインポートとエクスポート。declspec(dllimport) , __declspec(dllexport) , および
-
[解決済み] DLLとLIBファイル - 何が、なぜ?
-
[解決済み] ActiveXコンポーネントがオブジェクトを作成できない
-
[解決済み] 圧縮(zip)フォルダにファイル/フォルダを送信しようとすると何も起こらない
-
[解決済み】64ビットWindowsで64ビットDLLはSystem32に、32ビットDLLはSysWoW64に入るのはなぜですか?
-
[解決済み] CMakeを使ってDLLファイルを実行ファイルと同じフォルダーにコピーする方法は?