web-dev-qa-db-ja.com

静的ライブラリと動的ライブラリの違いは何ですか

C言語で静的ライブラリと動的ライブラリの違いは何ですか?

19
KaramJaber

この概念は少し広すぎるので説明できないかもしれませんが、私はあなたがさらに学ぶことができる基本的な考えをあなたに与えようとします。

まず、ライブラリとは何かを知る必要があります。基本的に、ライブラリは関数のコレクションです。コードまたはその特定のファイルで定義されていない関数を使用していることに気づいたかもしれません。それらにアクセスするために、これらの関数の宣言を含むヘッダーファイルをインクルードします。コンパイル後、リンクと呼ばれるプロセスがあり、これらの関数宣言を別のファイルにある定義とリンクします。この結果が実際の実行可能ファイルです。

さて、私が説明したリンクは静的リンクです。つまり、すべての実行可能ファイルには、必要なすべてのライブラリ(関数のコレクション)が含まれています。同じ機能を必要とするプログラムがたくさんあるので、これはスペースの無駄です。この場合、メモリ内には同じ関数のより多くのコピーがあります。動的リンクは、コンパイル時ではなく実行時にリンクすることにより、これを防ぎます。つまり、すべての関数は特別なメモリ空間にあり、すべてのプログラムはそれらの複数のコピーがなくてもそれらにアクセスできます。これにより、必要なメモリ量が削減されます。

私の回答の冒頭で述べたように、これは基本的な理解を提供するために非常に簡略化された要約です。このトピックについてもっと勉強することを強くお勧めします。

46
Paul92

ウィンドウの場合:

静的ライブラリは、実行可能ファイル内でリンクされる.libファイルであり、時間とともに変化しません。

ダイナミックライブラリは、実行可能ファイルにリンクされた.dllファイルであり、実行時にロードするdllファイルに応じて変更される場合があります。

2
fernando.reyes