Cランタイムの違い

VCには、Cランタイムライブラリがいくつも類用意されている。大まかに分けると

  • リリース版、デバッグ
  • スタティックリンク版、ダイナミックリンク版
  • シングルスレッド版、マルチスレッド版
  • 新しいiostream版、古いiostream版(これらは自動で選択される)

の組み合わせになっている。

詳しくは以下を参照してください。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_crt_c_run.2d.time_libraries.asp

これらには互換性が確保されているわけでは無いので、プロジェクト全体でどのランタイムを使用するか統一しておかないとリンクが出来なくなる場合がある。

具体的に言うと、Prj1 と Prj2 が以下のように設定されていたとしよう。

プロジェクト名 生成物 依存ライブラリ Cランタイム
Prj1 1.exe 2.lib スタティックリンク版
Prj2 2.lib 無し ダイナミックリンク版

この場合、Prj1をビルドしようとするとリンクエラーが発生してしまうかもしれない。これを回避するには、2.libをスタティックリンク版のCランタイムを使用するようにするか、1.exeをダイナミックリンク版のCランタイムを使用するようにするかのどちらかをしないといけない。

何故かわからないが、デバッグ版、ダイナミックリンク版、マルチスレッド版を選択しても、MSVCRTD.libがリンクされずにリンクエラーとなる場合がある。その場合は、リンクライブラリにMSVCRTD.lib を明示的に指定する必要がある。