4

我发现,困难的方式至少boost::program_options取决于编译器配置的结构成员对齐方式。

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

有什么办法可以防止这种情况发生吗?如果对齐使代码不兼容,这不应该包含在库命名中吗?

4

1 回答 1

8

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

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

您可以在这里查看更详细的理由。

于 2010-04-26T07:54:59.877 回答