我正在使用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包含,但它没有解决问题。
发生了什么事?
提前致谢
答案 0 :(得分:0)
您必须确保使用与boost相同的设置编译程序。 看起来你使用了错误的项目模板(CLR的东西)来创建你的应用程序项目。
您可以尝试修改现有项目的属性以使其与boost兼容,但CLR ...
项目默认设置了许多不兼容的属性值,所以我认为最简单的方法是创建一个从头开始新项目(并导入现有代码)。
您应该使用“Empty Project”模板并创建一个新项目,然后将现有的源文件和头文件添加到其中,并再次添加boost include路径,并将任何所需的boost .lib文件添加到{{1 (大多数boost库都是开箱即用的,没有向链接器输入添加任何东西,因为它们只是标题,所以你可能不需要添加任何.libs。)
Boost是C ++所必需的,旨在被C ++代码使用,而不是C ++ / CLI代码,因此它只能用于本机C ++类,并且当包含在包含C ++的源文件中时,大多数boost头将生成头文件/ CLI代码。