【C++】静的リンクと動的リンクの違い
静的リンクと動的リンクの違いについて教えてください。
ググって、wikiにて確認したところ、
動的リンクは、実行時にプログラムの結合を行う。
静的リンクは、コンパイル直後の実行ファイル生成時に、ライブラリ等を全てリンクし、必要なコードが全て揃った実行ファイルを生成する。
というのはわかりました。
それを踏まえて、
(1)-(1)libファイルで静的リンクさせるケース
メソッドやプロパティのインデックスというかインタフェース仕様のみ書かれている。
そして、そのインデックスを元にコンパイルチェックを行っている。
(1)-(2)objファイルで静的リンクさせるケース
objには、.cppと、.h に書かれている処理のうち、そのソース本体(そのクラス自身のモノとして持っている処理)のプロパティやメソッドのことが機械語で書かれている。
プロパティやメソッドが書かれているため、当然インタフェース仕様もわかる。
であろうと捉えていますが、この認識で大雑把には合っていますでしょうか?
また、DLLを使う場合、動的リンクとは呼ばれているものの、
「DLLでは、objに加え、必要なリンクの情報まで持っている」と思われるので、
結局、リンカによるリンク実行時に、インタフェースで不整合が起きていないかはチェックされているという認識なのですが、合っていますでしょうか?
(だとすると、なぜ、ある意味、DLLを使っていても静的リンクなのかなと感じ、動的リンクと呼ぶことに不自然さを感じます)
宜しくお願いいたします。
.
お礼
ありがとうございます! シンボリックリンクは元のファイルに影響があるのですか? それは知りませんでした。 早速実行してみます!