0

我正在使用 VS2010 Express 并且刚刚安装了 Boost v1_47。我已将“包含”文件夹添加到“附加包含文件夹”选项中,并将“lib”文件夹添加到 VS 中的“附加库”选项中。

然后,我在我的一个文件中包含了 boost/regex.hpp,但实际上还没有使用 boost 编写任何代码。但是,在构建解决方案时,我收到很多错误消息,有两种形式:

  • 重新定义错误,例如:

1>D:\boost\boost_1_47\boost/detail/interlocked.hpp(83): error C2373: '_InterlockedCompareExchangePointer' : 重新定义;不同的类型修饰符 1> C:\Program Files\Microsoft SDKs\Windows\v7.1\include\winnt.h(2597) : 参见 '_InterlockedCompareExchangePointer' 的声明

  • 无效的调用约定错误(很多),例如:

D:\boost\boost_1_47\boost/regex/v4/regex_traits_defaults.hpp(271): 错误 C3641: 'boost::re_detail::global_lower' : 使用 /clr:pure 或 /clr 编译的函数的调用约定 '__cdecl' 无效:安全的

注意:我没有在我的任何源/头文件中明确包含 winnt.h,并尝试取消激活预编译的头文件并删除 stdafx.h 包含,但它没有解决问题。

这是怎么回事?

提前致谢

4

1 回答 1

0

您必须确保使用与 boost 相同的设置来编译程序。您似乎使用了错误的项目模板(CLR 的东西)来创建您的应用程序项目。

您可以尝试修改现有项目的属性以使其与 boost 兼容,但是这些CLR ...项目默认设置了许多不兼容的属性值,所以我认为最简单的方法是从头开始创建一个新项目(并导入您的现有代码)。

您应该使用“空项目”模板并创建一个新项目,然后将现有的源文件和头文件添加到其中,并再次添加 boost 包含路径,并将任何所需的 boost .lib 文件添加到Project Properties > Linker > Input > Additional Dependencies(大多数 boost 库都可以框而不向链接器输入添加任何内容,因为它们只是标题,因此您可能不需要添加任何 .libs)。

Boost 是 C++ 必需的,旨在供 C++ 代码使用,而不是 C++/CLI 代码,因此它只能与本机 C++ 类一起使用,并且大多数 boost 标头在包含在包含 C++/CLI 代码的源文件中时会生成标头.

于 2012-05-17T11:55:36.720 回答