0

在编译 boost 时定义 BOOST_DISABLE_ABI_HEADERS 会带来什么危害?

从升压文件:boost_1_37_0\boost\config\user.hpp

// BOOST_DISABLE_ABI_HEADERS: Stops boost headers from including any 
// prefix/suffix headers that normally control things like struct 
// packing and alignment. 
//#define BOOST_DISABLE_ABI_HEADERS

为什么 boost 觉得需要控制结构的打包和对齐?

它可能与提升序列化并确保它在所有平台上都相同吗?如果我只运行 Windows,我可以安全地定义它吗?

4

3 回答 3

2

该定义确保 ABI(应用程序二进制接口)在版本和编译器之间保持兼容。没有它,您的应用程序将无法使用由另一个应用程序安装的 boost dll(可能是使用与您不同的编译器编译的)。

如果您要静态链接到 boost,或者如果您可以确保您的应用程序只使用您自己编译的 boost dll,那么是的,您可以安全地定义它。但是,如果你不能保证,你就不能定义它。

于 2009-01-04T13:46:13.177 回答
1

这是我在 Boost 文档中可以找到的内容:http: //www.boost.org/doc/libs/1_31_0/libs/config/config.htm

这是一个相当旧的版本,但大概,#define 的含义没有改变。

于 2009-01-04T14:11:42.423 回答
0

下面是定义 BOOST_DISABLE_ABI_HEADERS 的概要:

  • 如果你使用一些共享的 boost dll,你会得到未定义的行为
  • 如果您静态链接到您的 boost 库,或者您确定您只使用自己的 dll,那么您可能是安全的,请继续阅读我为什么说可能。
  • 如果您在项目中的多个 .lib 中使用 boost,它们都必须具有相同的编译器设置,因为编译器设置的更改会使打包和对齐方式不同。
  • 我怀疑不同操作系统和平台(x86 与 x64)之间的兼容性可能不适用于提升序列化之类的东西。

总的来说,定义它不是很安全,而不管它更安全。

于 2009-01-04T15:08:32.230 回答