在VS2010 Express中提升 - 重新定义和无效的调用约定错误

时间:2012-05-17 08:38:42

标签: visual-studio-2010 visual-c++ boost compiler-errors

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

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

  • 重新定义错误,例如:

1> D:\ boost \ boost_1_47 \ boost / detail / interlocked.hpp(83):错误C2373:'_InterlockedCompareExchangePointer':重新定义;不同类型的修饰符 1 GT; 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编译的函数调用约定'__cdecl'无效:pure或/ clr:安全

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

发生了什么事?

提前致谢

1 个答案:

答案 0 :(得分:0)

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

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

您应该使用“Empty Project”模板并创建一个新项目,然后将现有的源文件和头文件添加到其中,并再次添加boost include路径,并将任何所需的boost .lib文件添加到{{1 (大多数boost库都是开箱即用的,没有向链接器输入添加任何东西,因为它们只是标题,所以你可能不需要添加任何.libs。)

Boost是C ++所必需的,旨在被C ++代码使用,而不是C ++ / CLI代码,因此它只能用于本机C ++类,并且当包含在包含C ++的源文件中时,大多数boost头将生成头文件/ CLI代码。