質問

ライブラリ -

私は、DLLのとLIBの彼らは適切に実行するプログラムのために必要不可欠なコードが含まれていること以外についてほとんど知りません。しかし、なぜコンパイラは全くそれらを生成できますか?それだけで、単一の実行可能ファイルにすべてのコードを含めることが容易ではないでしょうか?そして、DLLのとLIBの違いは何でしょうか。

役に立ちましたか?

解決

静的ライブラリ(LIB)と動的ライブラリ(DLL)があります。

あなたは多くのプログラムで使用するコードを持っている可能性があるため、

ライブラリが使用されています。あなたは文字列の文字数を数える関数を書く場合たとえば、その関数は、プログラムの多くに有用であろう。あなたはその機能が正常に機能し得るたら、コードにあなたがそれを使用するたびに再コンパイルする必要がありますする必要はありませんので、あなたは、ライブラリにその関数の実行可能コードを入れて、リンカは、あなたのプログラムにコンパイルされたコードを抽出して挿入することができます。静的ライブラリは時々このような理由のためのアーカイブ」と呼ばれています。

動的ライブラリは、この一歩取ります。各プログラムのスペースを取ってライブラリ関数の複数のコピーを持っている無駄なようです。なぜ彼らは、関数のすべての共有1コピーすることはできませんか?これは、動的ライブラリがためているものです。むしろそれがコンパイルされたときに、あなたのプログラムにライブラリのコードを構築するよりも、それがメモリにロードされると、それはあなたのプログラムにそれをマッピングすることによって実行することができます。同じ機能を使用して同時に実行される複数のプログラムは、メモリをすべて共有する1つのコピー保存することができます。実際には、あなたはあなたのコードを通過する経路に応じて、必要な場合にのみ、動的ライブラリをロードすることができます。あなたが任意の印刷を行っていない場合は、メモリを占有してプリンタルーチンを持つにはポイントはありません。一方で、これはあなたのプログラムが動作しているすべてのマシンにインストールされているダイナミックライブラリのコピーを持っている必要がありますを意味します。これは、問題の独自のセットを作成します。

例として、「C」で記述されたほぼすべてのプログラムは、ライブラリからの機能が必要になりますいくつかのプログラムは、すべての機能が必要になりますが、」Cランタイムライブラリと呼ばれます。 Cランタイムは、静的および動的の両方のバージョンがありますので、あなたのプログラムは、特定のニーズに応じて、使用するバージョンを確認することができます。

他のヒント

別の態様は、セキュリティ(難読化)です。コードの一部は、メインアプリケーションから抽出され、ダイナミックリンクライブラリ「分離」に入れられると、単離されているので、(リバースエンジニアリング)のコードを、攻撃分析することが容易です。コードの同じ部分がLIBライブラリに保持されたときに、それがコンパイルされた(連結された)ターゲットアプリケーションの一部であり、これは、このように硬いターゲットバイナリの残りの部分からコードのその部分を単離する(分化)する。

DLL / LIBを作成するだけでなく、実行中にコードをコンパイルするための一つの重要な理由は、再利用および再配置です。平均Javaまたは(例えば).NETアプリケーションは、ほとんどの場合、いくつかのサードパーティ(またはフレームワーク)ライブラリを使用します。ちょうどではなく、アプリケーションにサードパーティのコードのすべてをコンパイルするより、事前に構築されたライブラリーに対してコンパイルするためにはるかに簡単かつ高速です。ライブラリにあなたのコードをコンパイルするにも、例えば、優れたデザインの実践を奨励します異なるタイプのアプリケーションで使用するためにあなたのクラスを設計します。

DLLは、他の実行可能プログラム間で共有される機能のライブラリです。ちょうどあなたの窓/ system32ディレクトリに見て、あなたはそれらの数十を見つけるでしょう。あなたのプログラムがDLLを作成すると、アプリケーションが* .EXEプログラムがDLL内で宣言されているシンボルを解決できるように、それはまた、通常のlibファイルを作成します。

それらは、他のプログラムによって共有されていない -

の.libは、静的にプログラムにリンクされている関数のライブラリです。 * .LIBファイルにリンクする各プログラムは、そのファイル内のすべてのコードを持っています。あなたはC.libとリンクする二つのプログラムA.EXEとB.exeを持っている場合は、それぞれAとBは両方C.libでコードが含まれます。

あなたはDLLとLIBSの作成方法は、使用するコンパイラに依存します。各コンパイラは違っています。

もう一つの違いは、パフォーマンスにあります。

DLLは、共有メモリの概念と.EXE(S)、.EXE(S)及びDLLの作業によって、実行時にロードされ、従って、性能が比較的静的リンクに低くなるように

一方、.LIBリクエストすべてのプロセスに、コンパイル時に静的にリンクされているコードです。したがって.EXE(複数可)は、したがって、プロセスの性能を向上させる、単一のメモリを持っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top