boost库是否应该依赖于结构成员对齐?

时间:2010-04-26 07:31:37

标签: c++ boost alignment memory-alignment

我发现hard way,至少boost::program_options依赖于编译器配置的结构成员对齐。

如果使用默认设置构建boost并使用4字节对齐(/Zp4)将其链接到项目,则它将在运行时失败(使用program_options进行最小测试)。 Boost将生成一个断言,指示可能的错误调用约定,但真正的原因是结构成员对齐。

有什么方法可以阻止这种情况吗?如果对齐使得代码不兼容,那么这不应该包含在库命名中吗?

1 个答案:

答案 0 :(得分:8)

您需要确保您的程序和您链接的库具有相同的ABI。

可以改变C ++类和函数的ABI的编译器开关的数量可能太大,因此命名超过3000种组合显然是一个问题。

您可以查看here了解更详细的理由。