C++静的ライブラリと動的ライブラリの関係
ライブラリとは何ですか?
ライブラリは、既存の成熟した再利用可能なコードで書かれています。実際には、すべてのプログラムは多くの基本的なライブラリに依存しています。誰もがコードを最初から作成することは不可能であるため、ライブラリの存在は非常に重要です。
いわゆる静的と動的はリンクを指します。プログラムを実行可能プログラムにコンパイルする手順を確認します:
静的ライブラリ:
[静的ライブラリ] になる理由は、リンク段階でアセンブリによってオブジェクト ファイル .o が生成されるためです。ライブラリは相互にリンクされ、実行可能ファイルにパッケージ化されます。したがって、対応するリンク方法は静的リンクと呼ばれます。
静的ライブラリとアセンブリによって生成されたターゲット ファイルが 1 つの実行可能ファイルにリンクされると想像してください。その場合、静的ライブラリは .o ファイルと同様の形式を持つ必要があります。実際、静的ライブラリは、単純にターゲット ファイル (.o/.obj ファイル) のコレクション、つまり、多数のターゲット ファイルを圧縮およびパッケージ化して形成されたファイルとみなすことができます。静的ライブラリの特徴のまとめ:
1. 静的ライブラリによる関数ライブラリのリンクはコンパイル中に完了します。
2. プログラムは実行中に関数ライブラリとは関係がないため、移植が簡単です。
3. すべての関連オブジェクト ファイルと関連する関数ライブラリが 1 つの実行可能ファイルにリンクされているため、スペースとリソースが無駄になります。
上記の紹介を通じて、静的ライブラリは使いやすく理解しやすく、コードの再利用という目的も達成できることがわかりました。では、なぜ動的ライブラリが必要なのでしょうか。
なぜ動的ライブラリが必要なのでしょうか?
なぜ動的ライブラリが必要なのかというと、実は静的ライブラリの特性によるものです。
1. スペースの無駄は静的ライブラリの問題です。
2. もう 1 つの問題は、静的ライブラリがプログラムの更新、展開、リリース ページに問題を引き起こす可能性があることです。静的ライブラリ liba.lib が更新された場合、それを使用するアプリケーションを再コンパイルしてユーザーにリリースする必要があります (プレーヤーにとっては小さな変更かもしれませんが、プログラム全体が再ダウンロードされ、完全に更新されます)。 。
動的ライブラリは、プログラムのコンパイル時にターゲット コードにリンクされませんが、プログラムの実行時にロードされます。異なるアプリケーションが同じライブラリを呼び出す場合、メモリ内に共有ライブラリのインスタンスを 1 つだけ持つ必要があるため、スペースの無駄が発生する問題が回避されます。プログラムの実行中に動的ライブラリがロードされるため、静的ライブラリがプログラムの更新、展開、リリース ページに支障をきたすという問題も解決されます。ユーザーは、動的ライブラリの更新 (増分更新) のみを行う必要があります。
ダイナミック ライブラリの機能の概要:
1. ダイナミック ライブラリは、プログラムが実行されるまで、一部のライブラリ関数へのリンクの読み込みを延期します。
2. プロセス間のリソース共有が実現できます。 (そのため、動的ライブラリは共有ライブラリとも呼ばれます)
3. 一部のプログラムを簡単にアップグレードできるようにします。
4. リンクの読み込みは、プログラマがプログラム コード (表示呼び出し) で完全に制御することもできます。