编译 boost 时定义 BOOST_DISABLE_ABI_HEADERS 会带来什么危害?
题
编译 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的含义没有改变。
不隶属于 StackOverflow