【发布时间】:2010-04-26 15:54:59
【问题描述】:
我发现,hard way,至少 boost::program_options 依赖于编译器配置的结构成员对齐。
如果您使用默认设置构建 boost 并将其与使用 4 字节对齐 (/Zp4) 的项目链接,它将在运行时失败(使用 program_options 进行了最小测试)。 Boost 会生成一个断言,表明可能存在错误的调用约定,但真正的原因是结构成员对齐。
有什么办法可以防止这种情况发生吗?如果对齐导致代码不兼容,不应该将其包含在库命名中吗?
【问题讨论】:
-
您知道,有 很多 编译器选项会改变 ABI。他们不能都被命名。有时,即使是 Boost 开发人员也不得不假设他们的用户有能力并且知道如何链接到库
-
您自己编译程序选项库吗?还是使用预建的?如果你能提供我们想要的测试用例,即 Vladimir P.,很乐意调试它。因为只要 all 使用兼容的选项编译代码,事情就不会中断。
标签: c++ boost alignment memory-alignment