アプリ版:「スタンプのみでお礼する」機能のリリースについて

静的リンクと動的リンクの違いについて教えてください。

ググって、wikiにて確認したところ、
動的リンクは、実行時にプログラムの結合を行う。
静的リンクは、コンパイル直後の実行ファイル生成時に、ライブラリ等を全てリンクし、必要なコードが全て揃った実行ファイルを生成する。
というのはわかりました。

それを踏まえて、
 (1)-(1)libファイルで静的リンクさせるケース
  メソッドやプロパティのインデックスというかインタフェース仕様のみ書かれている。
  そして、そのインデックスを元にコンパイルチェックを行っている。

 (1)-(2)objファイルで静的リンクさせるケース
  objには、.cppと、.h に書かれている処理のうち、そのソース本体(そのクラス自身のモノとして持っている処理)のプロパティやメソッドのことが機械語で書かれている。
  プロパティやメソッドが書かれているため、当然インタフェース仕様もわかる。

であろうと捉えていますが、この認識で大雑把には合っていますでしょうか?

また、DLLを使う場合、動的リンクとは呼ばれているものの、
「DLLでは、objに加え、必要なリンクの情報まで持っている」と思われるので、
結局、リンカによるリンク実行時に、インタフェースで不整合が起きていないかはチェックされているという認識なのですが、合っていますでしょうか? 
(だとすると、なぜ、ある意味、DLLを使っていても静的リンクなのかなと感じ、動的リンクと呼ぶことに不自然さを感じます)

宜しくお願いいたします。
.

A 回答 (3件)

 (1)-(1)libファイルで静的リンクさせるケース


 (1)-(2)objファイルで静的リンクさせるケース

この2つは大体同じ意味です

[exe ファイル ]
obj を集めて作成します。
main関数が含まれているため、実行すると動作します。
exe ファイルを作成する際、実行されない関数等は含めません

[lib ファイル ]
obj を集めて作成します。
main関数が無い為、実行する事はできません。
当然全ての関数が lib ファイルに含まれます


上記を踏まえて再度
[exe ファイル ]
cpp からコンパイルして作成された obj ファイルや
lib ファイル内のオブジェクトから main からの一連の流れで
使用する関数を集めて exe ファイルを作成します
libファイルにある実行されない関数等は含めません

lib ファイルの中身のオブジェクトが exe の中に存在するので
静的リンクした事になります。


[dll ファイル ]
obj を集めて作成します。
main関数が無い為、実行する事はできません。
当然全ての関数が dll ファイルに含まれます
内容は lib と同じですが動的リンクであるという点が違います。

[dll の lib ファイル ]
dll から 作成する事が出来ます。
その libファイル内には、dll内の同名の関数の情報があり
中身は dllへアクセスする処理があるだけです


上記を踏まえて再度
[exe ファイル ]
cpp からコンパイルして作成された obj ファイルや
lib ファイル内のオブジェクトから main からの一連の流れで
使用する関数を集めて exe ファイルを作成します

exe の中には dll は含まれておりません
その為 exe のファイルサイズは小さく、dll が無ければ動きません
    • good
    • 1
この回答へのお礼

ありがとうございます!

質問に回答して頂けて、凄く助かりました!

しかも各拡張子毎にご説明が分かれていてわかりやすかったです!

お礼日時:2013/07/19 04:15

前提も踏まえた結果も違います。


後段も違います。

最初から勉強し直しましょう。
    • good
    • 0
この回答へのお礼

ありがとうございます

お礼日時:2013/07/19 04:05

>それを踏まえて、


(略)
>であろうと捉えていますが、この認識で大雑把には合っていますでしょうか?

何をどう踏まえたら、そういう認識にたどり着くのかわかりませんがあってません。
    • good
    • 0
この回答へのお礼

ありがとうございます

お礼日時:2013/07/19 04:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!