编译boost时定义BOOST_DISABLE_ABI_HEADERS会有什么危害?

时间:2009-01-04 13:38:22

标签: c++ boost packing bjam

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

来自boost文件: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感觉需要控制结构填充和对齐?

是否可能与boost序列化有关,并确保它在所有平台上都能正常工作?如果我只运行Windows,我可以安全地定义它吗?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

以下是定义BOOST_DISABLE_ABI_HEADERS:

的概要
  • 如果您使用某些共享的强化dll,您将获得未定义的行为
  • 如果您静态链接到您的升级库,或者您确定自己只使用自己的dll,那么您可能会安全,请继续阅读我说的原因。
  • 如果在项目中的几个.lib中使用boost,则它们必须具有相同的编译器设置,因为编译器设置的更改可以使打包和对齐不同。
  • 我怀疑不同操作系统和平台(x86 vs x64)之间的兼容性可能不适用于升级序列化等。

总的来说,定义它并不是非常安全,而且单独放置会更安全。