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


69

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

Answers:


92

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

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

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


谢谢大卫,您是说问题出在cpp文件上?我已经通过添加<PlatformToolset> v110 </ PlatformToolset>对项目文件进行了所有修改。所以我认为问题可能不在于Project文件,不是吗?
tjdoubts 13-10-24

2
不,这是目标文件。编译器发出的内容。它们似乎在.lib文件中。您需要重新编译它。
David Heffernan

大卫,您好,我是C ++的新手。我基本上是ac#程序员。您能详细说明一下吗
tjdoubts 13-10-24

5
编译器告诉您使用VS2012重新编译Projectname1.lib。
David Heffernan

1
在我的情况下,lib文件甚至没有编译,给出错误“程序数据库文件'vc80.pdb'具有过时的格式,请删除并重新编译”。我做了编译器的建议,现在正在编译lib和依赖lib的项目。
sergiol 2015年

41

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

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

适用于所有人,v100适用于Visual Studio 2010,v110适用于Visual Studio 2012

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


C#项目的设置在哪里?
sergiol

@ sergiol,PlatformToolset属性是一个MSBuild属性,用于指定C ++工具集的版本。因此,此属性与C#无关。
Cary

4

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


这不应该是一个答案,而是一个新问题。
drescherjm 2014年

3

我从2010年升级到2013年,并且在更改了所有项目的Platform Toolset之后,我需要右键单击Solution并选择Retarget ...使其起作用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.