c++ - boost库应该依赖于结构成员对齐吗?

标签 c++ boost alignment memory-alignment

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

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

有什么办法可以避免这种情况吗?如果对齐导致代码不兼容,难道不应该将其包含在库命名中吗?

最佳答案

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

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

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

关于c++ - boost库应该依赖于结构成员对齐吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2711732/

相关文章:

c++ - 文件处理文本文件或二进制文件

c++ - 澄清 `boost::bind`和 `this`的使用

c++ - 创建静态链接所有依赖项的共享 .so 库

c++ - 在 boost::spirit mini_c 中实现 "NOT"

iOS - 如何保持两个或多个对象水平居中,同时保持它们之间的空间?

html - 将页面上的前 X 像素数量设置为白色背景,然后将其余像素设置为黑色,并在其上放置一个图像在中心

c++ - 将非算术类型作为参数传递给 cmath 函数是否有效?

c++ - std::atomic<int> 递减和比较

html - 如何将 div 与我的导航栏对齐?

c++ - 使用运算符将​​字符串流传递给 istream >>