Я новичок в C ++ и Boost. Я делаю небольшую простую программу, чтобы попытаться изучить библиотеку Boost Filesystem. Я следовал указаниям по созданию Boost libs. И теперь, когда я пытаюсь скомпилировать этот простой код, я получаю 6 таких ошибок.
Ошибка 5, ошибка LNK2038: для '_MSC_VER' обнаружено несоответствие: значение '1700' не соответствует значению '1600' в App.obj C: \ SOURCE \ ConsoleApp2 \ ConsoleApp2 \ libboost_filesystem-vc110-mt-gd-1_51.lib (codecvt_error_category) .obj) ConsoleApp2 Ошибка 1 ошибка LNK2038: обнаружено несоответствие для _MSC_VER: значение «1700» не соответствует значению «1600» в App.obj C: \ SOURCE \ ConsoleApp2 \ ConsoleApp2 \ libboost_filesystem-vc110-mt-gd-1_51.lib (операции .obj) ConsoleApp2 Ошибка 2, ошибка LNK2038: обнаружено несоответствие для _MSC_VER: значение «1700» не соответствует значению «1600» в App.obj C: \ SOURCE \ ConsoleApp2 \ ConsoleApp2 \ libboost_filesystem-vc110-mt-gd-1_51.lib (путь .obj) ConsoleApp2 Ошибка 3, ошибка LNK2038: обнаружено несоответствие для _MSC_VER: значение «1700» не соответствует значению «1600» в App.obj C: \ SOURCE \ ConsoleApp2 \ ConsoleApp2 \ libboost_filesystem-vc110-mt-gd-1_51.lib (path_traits .obj) ConsoleApp2 Ошибка 4, ошибка LNK2038: обнаружено несоответствие для _MSC_VER: значение «1700» не соответствует значению «1600» в App.obj C: \ SOURCE \ ConsoleApp2 \ ConsoleApp2 \ libboost_filesystem-vc110-mt-gd-1_51.lib (windows_file_codecvt) .obj) ConsoleApp2 Ошибка 6, ошибка LNK1104: невозможно открыть файл 'libboost_filesystem-vc100-mt-gd-1_51.lib' C: \ SOURCE \ ConsoleApp2 \ ConsoleApp2 \ LINK ConsoleApp2
Мой код в App.cpp
в моем проекте ConsoleApp2
#include <iostream>
#include <boost/filesystem.hpp>
using namespace std;
using namespace boost::filesystem;
int main(void)
{
path p = "C:\\TestFiles";
cout << is_directory(p);
return 0;
}
Я пытаюсь скомпилировать приложение с помощью Visual Studio 2010. Часть информации, которую я нашел в Интернете, была связана с VS 2012. Это, я не думаю, относится ко мне. Я хотел бы попытаться решить 5 ошибок несоответствия и окончательную ошибку ссылки. Я надеюсь, что последняя ошибка связана с 5 до него.
libboost_filesystem-vc110-mt-gd-1_51.lib
библиотека, которая была построена с VS 2012 (также известный как VC 11.0), как указано vc110
в соглашении об именах. Эта библиотека не будет правильно связываться с объектами, созданными с помощью VS 2010 (также известного как VC 10.0).
Если вы хотите собрать свою программу с VS 2010, вам нужно получить или собрать библиотеки повышения для VS 2010.
Открой *.vcxproj
файл с текстовым редактором.
Найти и удалить <_ProjectFileVersion>
элемент, а затем сохраните файл.
Пример,
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>11.0.30319.1</_ProjectFileVersion> <--- Delete this element
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
И восстановите решение снова. Вы увидите, что проект успешно компилируется.
Я пытался скомпилировать код Teamcenter ITK C ++ и получил то же сообщение об ошибке:
ошибка LNK2038: обнаружено несоответствие для _MSC_VER: значение «1700» не
соответствует значению ‘1600’ в itk_main.obj
Обходной путь, который я сделал, искал msvcprt.lib, находящийся где-то в c:
(использовал для поиска everything.exe, который можно найти на voidtools.com)
Открыл этот файл в NP ++ или текстовом редакторе для поиска по ключевому слову _MSC_VER и изменил значение / FAILIFMISMATCH: «_ MSC_VER = 1700» на / FAILIFMISMATCH: «_ MSC_VER = 1600»
И да, я смог собрать.
Решение, упомянутое виньешем наиду, сработало для меня.
но не совсем msvcprt.lib
найдите файл .lib в сообщении об ошибке.
В моем случае был файл somefile.lib,
я искал в проводнике, который дал два одинаковых файла в папке
1) Выпуск
2) отладки
Открыл somefile.lib в папке отладки, открыл в NP ++, нашел и заменил
например: 1700 с 1900 (VS 2015) в моем случае
перекомпилирована, ошибка альта исчезла.
Для краткого объяснения, почему, как есть несколько технических причин, приведенных другими пользователями.
PS: я компилировал код, встроенный в VS 2012 в VS2015, а 1700 — это версия компилятора для VS 2012, 1900 для VS 2015