web-dev-qa-db-ja.com

エラーLNK2038: '_MSC_VER'の不一致が検出されました:値 '1600'はCppFile1.objの値 '1700'と一致しません

プロジェクトをVS2010からVS2012に変換していましたが、特定のプロジェクトで_MSC_VERリンカーエラーが発生しています。グーグルで長い間ネットサーフィンした後、私はこの問題がVS2010で作成されたライブラリをVS2012にリンクすることに起因することを発見しました。

どのプロジェクトがエラーの原因であるかを見つけるにはどうすればよいですか?ここでエラーを引用しています:

Error   6   error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj      D:\ProjectLocation\Projectname1.lib(CppFile2.obj) Projectname2
Error   15  error LNK2001: unresolved external symbol "private: static void __cdecl std::locale::facet::_Facet_Register(class std::locale::facet *)" (?_Facet_Register@facet@locale@std@@CAXPAV123@@Z)  D:\ProjectLocation\Projectname1.lib(CppFile3.obj)   Projectname2
Error   13  error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj    D:\ProjectLocation\Projectname1.lib(CppFile4.obj)   Projectname2
Error   12  error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj    D:\ProjectLocation\Projectname1.lib(CppFile5.obj)   Projectname2
Error   10  error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj    D:\ProjectLocation\Projectname1.lib(CppFile6.obj)   Projectname2
Error   11  error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj    D:\ProjectLocation\Projectname1.lib(CppFile7.obj)   Projectname2
Error   9   error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj    D:\ProjectLocation\Projectname1.lib(CppFile8.obj)   Projectname2
Error   4   error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj       D:\ProjectLocation\Projectname1.lib(CppFile9.obj)    Projectname2
Error   14  error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj    D:\ProjectLocation\Projectname1.lib(CppFile10.obj)  Projectname2
Error   7   error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj    D:\ProjectLocation\Projectname1.lib(CppFile11.obj)  Projectname2
Error   8   error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj    D:\ProjectLocation\Projectname1.lib(CppFile12.obj)  Projectname2
Error   5   error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj    D:\ProjectLocation\Projectname1.lib(CppFile13.obj)  Projectname2
65
TVSuser1654136

異なるバージョンのコンパイラによってコンパイルされたオブジェクトをリンクしようとしています。 VSの最新バージョンでは、少なくともC++標準ライブラリを使用している場合はサポートされていません。標準ライブラリの異なるバージョンはバイナリ非互換であるため、リンカーへのすべての入力を同じバージョンでコンパイルする必要があります。リンクするすべてのオブジェクトを再コンパイルしてください。

コンパイラエラーにより、関連するオブジェクトに名前が付けられるため、質問の情報には、探している答えが既に含まれています。具体的には、リンクしている静的ライブラリを再コンパイルする必要があるようです。

そのため、解決策はVS2012でProjectname1.libを再コンパイルすることです。

88
David Heffernan

ソリューションのプロジェクトごとに、

プロパティ>構成。プロパティ>一般>プラットフォームツールセット

visual Studio 2010ではv100、Visual Studio 2012ではv110です。

visual Studio 2012からv100に取り組んでいる場合もあります

39
Ahmed U3

また、VS2010からVS 2012にいくつかのプロジェクトをインポートしていました。同じエラーが発生しました。 [プロパティ]> [構成]に戻すと、エラーが消えました。 [プロパティ]> [一般]> [v100へのプラットフォームツールセット(VS2010)]。しかし、それは正しいアプローチではないかもしれません。

4
Jinxi

2010から2013にアップグレードし、すべてのプロジェクトのプラットフォームツールセットを変更した後、ソリューションを右クリックして[再ターゲット...]を選択し、機能させる必要があります。

3
Hai Tran