标签: c++ boost alignment memory-alignment
我发现hard way,至少boost::program_options依赖于编译器配置的结构成员对齐。
boost::program_options
如果使用默认设置构建boost并使用4字节对齐(/Zp4)将其链接到项目,则它将在运行时失败(使用program_options进行最小测试)。 Boost将生成一个断言,指示可能的错误调用约定,但真正的原因是结构成员对齐。
/Zp4
有什么方法可以阻止这种情况吗?如果对齐使得代码不兼容,那么这不应该包含在库命名中吗?
答案 0 :(得分:8)
您需要确保您的程序和您链接的库具有相同的ABI。
可以改变C ++类和函数的ABI的编译器开关的数量可能太大,因此命名超过3000种组合显然是一个问题。
您可以查看here了解更详细的理由。