如果你已经用 C++ 编程了一段时间,你可能运行了一个“无缘无故”崩溃的程序,发现库的 ABI 不再兼容,你所要做的就是根据库的新版本。
ABI 中断的原因是多方面的:虚拟表的更改、添加/删除构造函数、析构函数或变量成员......
我想知道的是:是否有一个工具可以用来比较两个类定义(旧版本和当前版本)并告诉我它们是否与 ABI 兼容。
这对于确定我的项目的版本很有用(即,如果 ABI 更改,我将从 1.2.7 转到 1.3.0,如果 ABI 没有更改,我就转到 1.2.8)。
许多使用 C++ 编程的人都遇到过这个问题。一个很好的例子是 Qt,它清楚地表明补丁不会破坏二进制兼容性(尽管有时它们会犯错误,但通常,它们的代码是相当可靠的)。
http://qt-project.org/wiki/Qt-Version-Compatibility
http://qt-project.org/faq/answer/is_qt_binary_compatible
但是,Qt 的员工可以花时间验证(全部手动?)公共类没有以破坏兼容性的方式进行更改。我不能说那么多更小的 C++ 项目。