错误 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:ProjectLocationProjectname1.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:ProjectLocationProjectname1.lib(CppFile3.obj)   Projectname2
Error   13  error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj    D:ProjectLocationProjectname1.lib(CppFile4.obj)   Projectname2
Error   12  error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj    D:ProjectLocationProjectname1.lib(CppFile5.obj)   Projectname2
Error   10  error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj    D:ProjectLocationProjectname1.lib(CppFile6.obj)   Projectname2
Error   11  error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj    D:ProjectLocationProjectname1.lib(CppFile7.obj)   Projectname2
Error   9   error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj    D:ProjectLocationProjectname1.lib(CppFile8.obj)   Projectname2
Error   4   error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj       D:ProjectLocationProjectname1.lib(CppFile9.obj)    Projectname2
Error   14  error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj    D:ProjectLocationProjectname1.lib(CppFile10.obj)  Projectname2
Error   7   error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj    D:ProjectLocationProjectname1.lib(CppFile11.obj)  Projectname2
Error   8   error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj    D:ProjectLocationProjectname1.lib(CppFile12.obj)  Projectname2
Error   5   error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj    D:ProjectLocationProjectname1.lib(CppFile13.obj)  Projectname2

TL;DR;使用当前编译器(在OP的情况下为VS2012)重新编译所有旧的静态链接.lib文件。

<小时 />

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

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

所以解决方案是用VS2012重新编译Projectname1.lib。

只有在以下情况下,您才能链接到较旧的.lib文件:

  • 如果它们不是静态链接的,并且带有已编译的.dll文件(或.exe文件)。
  • 或者,如果两个标准库是二进制兼容的(在OP的情况下,它们不是)。

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

属性>配置。常规>平台工具集>属性

是所有人的一个,V100 for Visual Studio 2010,V110 for Visual Studio 2012

您可能正在从Visual Studio 2012使用v100

我也将一些项目从VS2010导入到VS 2012。我有同样的错误。当我设置属性>配置时,错误消失了。属性>常规>平台工具集为 v100 (VS2010)。然而,这可能不是正确的方法。

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

最新更新