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

sor*_*rin 4 c++ boost alignment memory-alignment

我发现,艰难的方式,至少boost::program_options是依赖于编译器配置的结构成员对齐.

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

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

Vic*_*iba 8

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

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

您可以在这里查看更详细的基本原理.