我发现,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/