2013-10-24 5 views
55

Konwertowałem moje projekty z VS2010 na VS2012.Ale otrzymuję komunikat o błędzie _MSC_VER w niektórych projektach . Po długim surfowaniu po Google odkryłem, że problem związany jest z połączeniem biblioteki utworzonej w VS2010 z VS2012.błąd LNK2038: wykryto niedopasowanie dla '_MSC_VER': wartość '1600' nie pasuje do wartości '1700' w CppFile1.obj

Jak mogę się dowiedzieć, który projekt powoduje błąd? Tutaj przytaczam błąd:

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 *)" ([email protected]@[email protected]@@[email protected]@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 

Odpowiedz

75

Próbujesz połączyć obiekty skompilowane przez różnych wersji kompilatora. To nie jest obsługiwane we współczesnych wersjach VS, przynajmniej jeśli używasz standardowej biblioteki C++. Różne wersje standardowej biblioteki są niekompatybilne z binariami, więc potrzebujesz wszystkich danych wejściowych do linkera, które będą kompilowane w tej samej wersji. Upewnij się, że ponownie skompilujesz wszystkie obiekty, które mają być połączone.

Błąd kompilatora określa nazwy obiektów, więc informacja, której dotyczy pytanie, już zawiera odpowiedź, której szukasz. W szczególności wydaje się, że biblioteka statyczna, którą łączysz, musi zostać ponownie skompilowana.

+0

Dziękuję David, Co mówisz, że problem dotyczy plików cpp? Dokonałem wszystkich modyfikacji w plikach projektu, dodając v110 .SO Myślę, że problem może nie dotyczyć pliku projektu, prawda? – TVSuser1654136

+2

Nie, to pliki obiektów. Co emituje kompilator. Wygląda na to, że znajdują się wewnątrz pliku .lib. Musisz go przekompilować. –

+0

Witam David, iam nowy do C++. Ja jestem zasadniczo programistą C#. Czy mógłbyś rozwinąć komentarze? – TVSuser1654136

37

dla każdego projektu w rozwiązania upewnić, że

Właściwości> Config. Właściwości> Ogólne> Platforma Toolset

jest jeden dla wszystkich z nich, v100 dla Visual Studio 2010, v110 dla visual studio 2012

również mogą pracować na V100 z visual studio 2012

+0

Gdzie to ustawienie dla projektów C#? – sergiol

+0

Jaki jest dokładnie twój błąd C#? –

+0

@sergiol, atrybut PlatformToolset jest atrybutem MSBuild, który służy do określania wersji zestawu narzędzi C++. Więc ten atrybut nie ma nic wspólnego z C#. – Cary

4

I importowałem również niektóre projekty z VS2010 do VS 2012. Miałem te same błędy. Błędy zniknęły po przywróceniu właściwości> Config. Właściwości> Ogólne> Zestaw narzędzi platformy do wersji v100 (VS2010). To może jednak nie być prawidłowe podejście.

+0

To nie powinna być odpowiedź, ale nowe pytanie. – drescherjm

3

Uaktualniłem od 2010 do 2013 roku i po zmianie wszystkich zestawów narzędzi Platformy projektów, muszę kliknąć prawym przyciskiem myszy Rozwiązanie i wybrać Retarget ..., aby działało.

Powiązane problemy