首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Boost in VS2010 Express -重新定义和无效的调用约定错误

Boost in VS2010 Express -重新定义和无效的调用约定错误
EN

Stack Overflow用户
提问于 2012-05-17 08:38:42
回答 1查看 707关注 0票数 0

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

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

  • 重定义错误,例如:

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

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

D:\boost\boost_1_47\boost/regex/v4/regex_traits_defaults.hpp(271):error C3641:“boost::re_detail::global_lower”:使用/clr:pure或/clr:safe编译的函数的无效调用约定“__cdecl”

注意:我没有在我的任何源文件/头文件中显式地包含winnt.h,并且尝试过去激活预编译的头文件并删除stdafx.h包含,但是它并没有解决这个问题。

到底怎么回事?

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2012-05-17 11:55:36

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

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

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

Boost是必需的C++,设计用于C++代码,而不是C++/CLI代码,因此它只能与本机C++类一起使用,当包含C++/CLI代码的源文件中时,大多数boost标头将产生标题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10632328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档