编译 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,我可以安全地定义它吗?

有帮助吗?

解决方案 3

以下是定义 BOOST_DISABLE_ABI_HEADERS 的概要:

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

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

其他提示

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

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

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

这是一个相当古老的版本,但可能是#define的含义没有改变。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top