erro LNK2038: incompatibilidade detectada para ‘_MSC_VER’: valor ‘1600’ não corresponde ao valor ‘1700’ em CppFile1.obj

Eu estava convertendo meus projetos de VS2010 para VS2012.Mas estou recebendo um erro de vinculador _MSC_VER em determinados projetos. Depois de um longo surfe pelo google descobri que a questão é devido à binding de uma biblioteca criada no VS2010 para o VS2012.

Como posso descobrir qual projeto está causando o erro? Aqui estou citando o erro:

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 

Você está tentando vincular objects compilados por diferentes versões do compilador. Isso não é suportado em versões modernas do VS, pelo menos não se você estiver usando a biblioteca padrão C ++. Diferentes versões da biblioteca padrão são binárias incompatíveis e, portanto, você precisa de todas as inputs para o linker a ser compilado com a mesma versão. Certifique-se de recompilar todos os objects a serem vinculados.

O erro do compilador nomeia os objects envolvidos para que as informações da pergunta já tenham a resposta que você está procurando. Especificamente, parece que a biblioteca estática que você está vinculando precisa ser re-compilada.

Portanto, a solução é recompilar Projectname1.lib com o VS2012.

para cada projeto em sua solução, certifique-se de que

Propriedades> Config. Propriedades> Geral> Conjunto de Ferramentas da Plataforma

é um para todos eles, v100 para visual studio 2010, v110 para visual studio 2012

você também pode estar trabalhando em v100 do visual studio 2012

Eu estava importando também alguns projetos do VS2010 para o VS 2012. Eu tive os mesmos erros. Os erros desapareceram quando eu retornei Propriedades> Config. Propriedades> Geral> Conjunto de ferramentas da plataforma para v100 (VS2010). Essa pode não ser a abordagem correta, no entanto.

Fiz o upgrade de 2010 para 2013 e depois de alterar o Platform Toolset de todos os projetos, preciso clicar com o botão direito do mouse na Solução e escolher Retarget … para fazer com que funcione.