リンカー ツール エラー LNK2038
'name' の不一致が検出されました。値 'value_1' が filename.obj の値 'value_2' と一致しません
シンボルの不一致がリンカーによって検出されました。 このエラーは、アプリの各部分 (アプリがリンクするライブラリやその他のオブジェクト コードを含む) が、競合するシンボル定義を使用していることを示しています。 detect mismatch プラグマは、このようなシンボルを定義し、競合する値を検出するために使用されます。
考えられる原因と解決策
このエラーは、プロジェクトのオブジェクト ファイルが古い形式のときに発生する可能性があります。 このエラーに対して他のソリューションを実行する前に、オブジェクト ファイルが最新であることを検証するために、クリーン ビルドを実行してください。
Visual Studio は、実行時エラーまたはその他の予測できない動作を発生させる可能性のある互換性のないコードのリンクを防ぐために、次のシンボルを定義します。
_MSC_VER
アプリまたはライブラリのビルドに使用される Microsoft C++ コンパイラ (MSVC) のメジャー バージョン番号とマイナー バージョン番号を示します。 MSVC の 1 種類のバージョンを使用してコンパイルされたコードは、さまざまなメジャー バージョン番号とマイナー バージョン番号のあるバージョンを使用してコンパイルされたコードと互換性がありません。 詳細については、「定義済みマクロ」で_MSC_VER
を参照してください。使用している MSVC のバージョンと互換性のないライブラリにリンクしていて、互換性のあるバージョンのライブラリを取得またはビルドできない場合は、以前のバージョンのコンパイラを使用してプロジェクトをビルドできます。プロジェクトの Platform Toolset プロパティを以前のツールセットに変更します。 詳細については、「方法: ターゲット フレームワークおよびプラットフォームのツールセットを変更する」を参照してください。
_ITERATOR_DEBUG_LEVEL
は、C++ 標準ライブラリで有効になっているセキュリティ機能とデバッグ機能のレベルを示します。 これらの機能は、特定の C++ 標準ライブラリのオブジェクトの表示を変更できるため、こうしたオブジェクトは、異なるセキュリティ機能とデバッグ機能を使用するオブジェクトと互換性がなくなります。 詳細については、「_ITERATOR_DEBUG_LEVEL」を参照してください。RuntimeLibrary
アプリまたはライブラリで使用される C++ 標準ライブラリと C ランタイムのバージョンを示します。 C++ 標準ライブラリまたは C ランタイムの 1 種類のバージョンを使用するコードは、異なるバージョンを使用するコードと互換性がありません。 詳細については、「/MD、/MT、/LD (ランタイム ライブラリの使用)」を参照してください。_PPLTASKS_WITH_WINRT
は、並列パターン ライブラリ (PPL) を使用するコードが、/ZW コンパイラ オプションに異なる設定を使用してコンパイルしたオブジェクトにリンクされています。 (/ZW
は C++/CX をサポートしています)。PPL を使用または依存するコードは、アプリの残りの部分で使用されるのと同じ/ZW
設定を使用してコンパイルする必要があります。
これらのシンボルの値は、Visual Studio ソリューション内のプロジェクト全体で一貫性があり、アプリがリンクしているコードやライブラリと一致していることを確認します。
サードパーティ ライブラリの問題と vcpkg
サードパーティ製のライブラリをビルドの一部として設定した際にこのエラーが表示された場合は、C++ パッケージ マネージャである vcpkg を使用してライブラリをインストール、ビルドすることを検討してください。 vcpkg では、大規模な拡大中のサード パーティのライブラリのリストがサポートされ、プロジェクトの一部として適切なビルドに必要なすべての構成プロパティと依存関係が設定されます。