70

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

4 回答 4

94

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

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

所以解决办法是用VS2012重新编译Projectname1.lib。

于 2013-10-24T20:20:25.337 回答
42

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

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

是所有这些,v100 用于 Visual Studio 2010,V110 用于 Visual Studio 2012

您也可能正在使用 Visual Studio 2012 的 v100

于 2013-11-10T13:29:42.297 回答
4

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

于 2014-10-29T12:10:54.550 回答
3

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

于 2015-06-17T06:59:02.003 回答