9

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

错误 5 错误 LNK2038:检测到“_MSC_VER”不匹配:值“1700”与 App.obj C:\SOURCE\ConsoleApp2\ConsoleApp2\libboost_filesystem-vc110-mt-gd-1_51.lib(codecvt_error_category)中的值“1600”不匹配.obj) ConsoleApp2  
错误 1 ​​错误 LNK2038:检测到“_MSC_VER”不匹配:值“1700”与 App.obj C:\SOURCE\ConsoleApp2\ConsoleApp2\libboost_filesystem-vc110-mt-gd-1_51.lib 中的值“1600”不匹配(操作.obj) ConsoleApp2  
错误 2 错误 LNK2038:检测到“_MSC_VER”不匹配:值“1700”与 App.obj C:\SOURCE\ConsoleApp2\ConsoleApp2\libboost_filesystem-vc110-mt-gd-1_51.lib 中的值“1600”不匹配(路径.obj) ConsoleApp2  
错误 3 错误 LNK2038:检测到“_MSC_VER”不匹配:值“1700”与 App.obj C:\SOURCE\ConsoleApp2\ConsoleApp2\libboost_filesystem-vc110-mt-gd-1_51.lib(path_traits)中的值“1600”不匹配.obj) ConsoleApp2  
错误 4 错误 LNK2038:检测到“_MSC_VER”不匹配:值“1700”与 App.obj C:\SOURCE\ConsoleApp2\ConsoleApp2\libboost_filesystem-vc110-mt-gd-1_51.lib(windows_file_codecvt) 中的值“1600”不匹配.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 有关。

4

4 回答 4

14

libboost_filesystem-vc110-mt-gd-1_51.lib是一个使用 VS 2012(也称为 VC 11.0)构建的库,如vc110命名约定中所示。此库无法与使用 VS 2010(也称为 VC 10.0)构建的对象正确链接。

如果你想用 VS 2010 构建你的程序,你需要为 VS 2010 获取或构建 boost 库。

于 2012-09-13T04:56:53.780 回答
4

*.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'">

并再次重建解决方案。您将看到项目编译成功。

于 2013-09-30T05:38:43.500 回答
0

我试图编译 Teamcenter ITK C++ 代码并得到相同的错误消息:

错误 LNK2038:检测到“_MSC_VER”不匹配:值“1700”与 itk_main.obj 中的值“1600”不匹配

我所做的解决方法是搜索位于 c 中某处的 msvcprt.lib:(使用 Everything.exe 进行搜索,可在 voidtools.com 上找到)

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

是的,我能够编译。

于 2015-10-12T07:32:10.380 回答
-1

vignesh naidu 提到的解决方案对我有用。

但不完全是 msvcprt.lib

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

就我而言,有 somefile.lib ,我在文件资源管理器中搜索了文件夹中的两个类似文件

1)发布 2)调试

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

重新编译,中提琴错误消失了。

对于为什么,其他用户给出的几个技术原因的简要说明。

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

于 2017-07-19T07:15:02.510 回答