【问题标题】:Should boost library be dependent on structure member alignments?boost库应该依赖于结构成员对齐吗?
【发布时间】: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


【解决方案1】:

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

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

您可以查看here 以获得更详细的理由。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    相关资源
    最近更新 更多