C++ 试图摆脱c++;增压警告

C++ 试图摆脱c++;增压警告,c++,boost,C++,Boost,每当我在我的项目中加入boost时,我都会收到一百万条这样的警告。有人知道我怎样才能摆脱这些警告吗 ../dependens\boost/config/abi_prefix.hpp(19) :警告C4103: 'dependens\boost\config\abi_prefix.hpp' :包括后更改对齐方式 标题,可能是由于缺少#pragma 包装(pop) 我知道我可以用pragma禁用警告,但我想知道这些警告的原因 原因是boost不会在每个需要打包数据的文件中推/弹出这些pragma。它

每当我在我的项目中加入boost时,我都会收到一百万条这样的警告。有人知道我怎样才能摆脱这些警告吗

../dependens\boost/config/abi_prefix.hpp(19) :警告C4103: 'dependens\boost\config\abi_prefix.hpp' :包括后更改对齐方式 标题,可能是由于缺少#pragma 包装(pop)


我知道我可以用pragma禁用警告,但我想知道这些警告的原因

原因是boost不会在每个需要打包数据的文件中推/弹出这些pragma。它们包括一个单独的文件(abi_prefix.hpp),然后是另一个文件(abo_suffix.hp),该文件执行push操作

这使得它们可以在任何地方重用相同的pragma包代码,这很方便,因为编译器之间可能会有所不同


不过它非常安全。#pragma push后面跟着一个pop,它只是从另一个文件中包含的。因此,您可能应该禁用该错误。

是的,您可以从config/abi/msvc_prefix.hpp中的#pragma pack指令获得该错误。它表示项目的默认打包不是8。这很不寻常,这是故意的吗?由于包装差异导致的错误可能有点难以诊断。

我找到了一种方法来消除此警告

您需要编辑boost\u 1\u**\ boost\config\user.hpp文件,并用boost\u DISABLE\u ABI\u标题取消注释该行

因此,您应该在此文件中定义:

#define BOOST_DISABLE_ABI_HEADERS
一旦这样做了,就可以了


请参阅下面的评论,了解此解决方案的危险性

只是为了澄清一下,当您不包含abi_prefix.hpp头时,错误就会消失?这是一个boost的aprt,头包含在一堆其他boost头中。只需在本页上绊倒一下:对我来说,它解决了所有警告消息。那不意味着它永远不能包装吗?看起来这可能会引入很多有趣的错误。如果您只使用自己的boost DLL或静态链接,那么这是安全的。请看这里:仅仅为了消除一个警告,似乎仍然有很多麻烦(和潜在bug的来源)。我想你最好还是取消那个警告。使用#define,如果您使用与其他代码稍有不同的编译器标志编译boost,就会发生有趣的崩溃。您还应该确保使用的所有项目都具有相同的生成设置。如果您有一个.lib,请使用Exmaple。总体上我同意你的观点,我将在没有这个定义的情况下重新编译。不过我会把这篇文章留到历史上,这样人们就可以看到了。