C++ / Boost 文件系统 - 检测到"_MSC_VER"不匹配:值'1700'与值"1600"不匹配

C++ / Boost Filesystem - mismatch detected for '_MSC_VER': value '1700' doesn't match value '1600'

本文关键字:不匹配 与值 1700 1600 MSC 文件系统 Boost 检测 C++ VER      更新时间:2023-10-16

我是C++和Boost的新手。我正在做一个简单的小程序来学习Boost文件系统库。我已经按照指示构建了Boost库。现在,当我试图编译这个简单的代码时,我得到了其中的6个错误。

错误5错误LNK2038:检测到"_MSC_VER"不匹配:值"1700"与App.obj C:\SOURCE\ConsoleApp2\ConsoleApp2\libboost_filsystem-vc110-mt-gd-1_51.lib(codecvt_Error_category.obj)ConsoleApp2中的值"1600"不匹配错误1错误LNK2038:检测到"_MSC_VER"不匹配:值"1700"与App.obj C:\SOURCE\ConsoleApp2\ConsoleApp2\libboost_filesystem-vc110-mt-gd-1_51.lib(operations.obj)ConsoleApp2中的值"1600"不匹配错误2错误LNK2038:检测到"_MSC_VER"不匹配:值"1700"与App.obj C:\SOURCE\ConsoleApp2\ConsoleApp2\libboost_filsystem-vc110-mt-gd-1_51.lib(path.obj)ConsoleApp2中的值"1600"不匹配错误3错误LNK2038:检测到"_MSC_VER"不匹配:值"1700"与App.obj C:\SOURCE\ConsoleApp2\ConsoleApp2\libboost_filsystem-vc110-mt-gd-1_51.lib(path_traits.obj)ConsoleApp2中的值"1600"不匹配错误4错误LNK2038:检测到"_MSC_VER"不匹配:值"1700"与App.obj C:\SOURCE\ConsoleApp2\ConsoleApp2\libboost_filsystem-vc110-mt-gd-1_51.lib(windows_file_decvt.obj)ConsoleApp2中的值"1600"不匹配错误6错误LNK1104:无法打开文件"libboost_filesystem-vc100-mt-gd-1_51.lib"C:\SOURCE\ConsoleApp2\ConsoleApp2\LINK ConsoleApp2

我的ConsoleApp2项目中App.cpp中的代码

#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所示。此库将无法与使用VS2010(也称为VC10.0)构建的对象正确链接

如果你想用VS2010构建你的程序,你需要获得或构建VS2010的boost库。

使用文本编辑器打开*.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"不匹配匹配itk_main.obj 中的值"1600"

我所做的变通方法是搜索位于c中某个位置的msvcprt.lib:(使用everything.exe进行搜索,可以在voidtools.com上找到)

在NP++或文本编辑器中打开该文件,搜索关键字_MSC_VER,并将值/FAILIFMISOMATCH:"_MSC_VER=1700"更改为/FAILIfmISOMATCH:"_MSC_VER=1600"

是的,我能够编译。

vignesh naidu提到的

解决方案对我有效。

但不完全是msvcprt.lib

在错误消息中查找.lib文件。

在我的情况下,有一些file.lib,我在文件资源管理器中搜索,它在文件夹中提供了两个类似的文件

1) Release2) 调试

已在调试文件夹中打开somefile.lib,在NP++中打开,已找到并替换例如:在我的情况下,1700与1900(VS 2015)

重新编译后,viola错误消失了。

为了简单解释为什么,其他用户给出了几个技术原因。

PS:i在VS2015中编译VS 2012中构建的代码,1700是VS 2012的编译器版本,1900是VS 2015 的编译器版本