上記のリンクエラー(LIBCMT(D).lib、MSVCRT(D).libライブラリ)は、プログラム内のモジュール/ライブラリ間のコード生成オプションの競合に関連しています。
モジュールをコンパイルすると、コンパイラは結果の.objに自動的にランタイムライブラリ(LIBCMT & MSVCRT)への参照を挿入します。さて、各コード生成モードのためのこれらのライブラリの1つのバージョンがあります(私は設定プロパティ - > C/C++ - >コード生成 - >ランタイムライブラリのオプションを参照しています)。したがって、異なるモードでコンパイルされた2つのモジュールがある場合、それらのライブラリのそれぞれが異なるバージョンのライブラリを参照し、リンカは両方をインクルードしようとしますが、基本的にすべてのシンボルが同じであるためこれらのライブラリでは、実装だけが異なります。
溶液は3つの部分に分かれています。まず、プロジェクト内のすべてのモジュールが同じモードを使用していることを確認します。第2に、プロジェクト間に依存関係がある場合は、すべて同じモードを使用する必要があります。第三に、サードパーティのライブラリを使用する場合は、使用するモードを知っているか(または採用しているか)、目的のモードで再コンパイルできる必要があります。
最後のものが最も難しいです。ライブラリがプリコンパイルされていることがあります。また、プロバイダが使用するモードに関する情報を提供するとは限りません。さらに、複数のサードパーティライブラリを使用している場合、競合するモードがある可能性があります。そのような場合、試行錯誤よりも良い選択肢はありません。
各Visual Studioバージョンには独自のランタイムライブラリセットがありますので、サードパーティライブラリを使用する場合は、使用しているVisual Studioの同じバージョンでコンパイルしたものを使用する必要があります。プロバイダが提供していない場合、唯一の選択は自分自身を再コンパイルすることです。
何かについては何も知らず、トラブルシューティングのための一般的な方法を求めています...ここでは最高の薬が予防であることは明らかです。ベストプラクティスを使用してエラーを防ぎ、トラブルシューティングを行うための仕組みを学びましょう。 – tenfour
大丈夫、ちょうどそれについて下塗りを読んでください。私はそれについて多くの嫌悪感を抱いています。この日にリンカーが存在しないようにする方法のように。しかし、私はそれは私が推測することができます。私は少なくとも、コンセプトと今彼らが何をすべきかを理解しています。 –
[リンカの簡単な紹介](http://blogs.msdn.com/b/oldnewthing/archive/2009/10/12/9905953.aspx) –