gpt4 book ai didi

c++ - 是否有工具可以检查对 C++ 类的更改是否会破坏该类的先前版本?

转载 作者:搜寻专家 更新时间:2023-10-31 01:47:56 24 4
gpt4 key购买 nike

如果您使用 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 的工作人员可以花时间验证(全部手动?)公共(public)类没有以破坏兼容性的方式进行更改。对于许多更小的 C++ 项目,我不能说那么多。

最佳答案

在 Linux 上有一个 abi-compliance-checker工具。它可用于验证 C++ 库的向后二进制兼容性。查看 Qt 库工具的示例报告:http://abi-laboratory.pro/tracker/timeline/qt/

您需要使用附加的 -g -Og 选项编译您的库的调试版本,并在 abi-dumper 的帮助下转储您的库的 ABI工具。然后比较不同版本的两个 ABI 转储以生成 ABI 更改报告。

enter image description here

关于c++ - 是否有工具可以检查对 C++ 类的更改是否会破坏该类的先前版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18598583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com