错误LNK2038:检测到'_MSC_VER'不匹配:值'1600'与CppFile1.obj中的值'1700'不匹配

时间:2013-10-24 20:14:12

标签: c++ visual-studio-2010 visual-c++ msbuild

我正在将我的项目从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

4 个答案:

答案 0 :(得分:87)

您正在尝试链接由不同版本的编译器编译的对象。现代版本的VS不支持这种功能,至少在使用C ++标准库时不支持。标准库的不同版本是二进制不兼容的,因此您需要使用相同版本编译链接器的所有输入。确保重新编译要链接的所有对象。

编译器错误命名所涉及的对象,因此问题的信息已经具有您正在寻找的答案。具体来说,您链接的静态库似乎需要重新编译。

因此,解决方案是使用VS2012重新编译Projectname1.lib。

答案 1 :(得分:39)

对于解决方案中的每个项目,请确保

属性>配置。属性>一般>平台工具集

是所有人的一个, 视觉工作室2010的v100, v110 for visual studio 2012

您也可能正在使用visual studio 2012的v100

答案 2 :(得分:4)

我还从VS2010导入了一些项目到VS 2012.我遇到了同样的错误。当我退回属性>时,错误消失了。配置。属性>一般>平台工具集到v100(VS2010)。然而,这可能不是正确的方法。

答案 3 :(得分:3)

我从2010年升级到2013年,并且在更改了所有项目后#39;平台工具集,我需要右键单击解决方案并选择重新定位...以使其正常工作。