Ошибка LNK2038: обнаружено несоответствие для "_MSC_VER": значение "1600" не соответствует значению "1700" в CppFile1.obj
Я преобразовывал свои проекты из VS2010 в VS2012.Но я получаю ошибку компоновщика _MSC_VER в некоторых проектах. После долгого просмотра через Google я обнаружил, что проблема связана с привязкой библиотеки, созданной в 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 *)" ([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
Ответы
Ответ 1
Вы пытаетесь связать объекты, скомпилированные разными версиями компилятора. Это не поддерживается в современных версиях VS, по крайней мере, если вы используете стандартную библиотеку C++. Различные версии стандартной библиотеки двоичные несовместимы, поэтому вам нужно, чтобы все входы в компоновщик были скомпилированы с той же версией. Убедитесь, что вы перекомпилируете все объекты, которые должны быть связаны.
Ошибка компилятора указывает объекты, связанные с тем, что информация уже имеет ответ, который вы ищете. В частности, кажется, что статическая библиотека, которую вы связываете, должна быть перекомпилирована.
Таким образом, решение заключается в перекомпиляции Projectname1.lib с VS2012.
Ответ 2
для каждого проекта в вашем решении убедитесь, что
Свойствa > Конфигурация. Свойствa > Общие > Набор инструментов для платформы
является одним для всех из них,
v100 для визуальной студии 2010,
v110 для визуальной студии 2012
вы также можете работать с v100 с visual studio 2012
Ответ 3
Я также импортировал некоторые проекты из VS2010 в VS 2012. У меня были те же ошибки. Ошибки исчезли, когда я вернул Свойствa > Конфигурация. Свойствa > Общие > Набор инструментов для платформы v100 (VS2010). Однако это может быть не правильный подход.
Ответ 4
Я обновил с 2010 по 2013 год и после изменения всех наборов инструментов для платформы, мне нужно щелкнуть правой кнопкой мыши по Solution и выбрать Retarget..., чтобы заставить его работать.