c++ - 如果 A 类的成员函数发生变化,A 类的客户端二进制文件需要重新构建吗?
问题描述
1.一个类在libA.so中实现
class A
{
A_fun();
B_fun();
}
2.client通过libA.so使用A类
client{
use A_fun();
}
在这种情况下,如果A类的成员函数添加了C_fun(),
class A
{
A_fun();
B_fun();
C_fun(); //added
}
据我所知,如果 A_fun() 参数更改,客户端必须重建。
但客户端不使用 C_fun()。
在这种情况下,需要重建客户端二进制文件吗?
解决方案
这取决于平台。在大多数平台上,向类添加非虚拟成员函数不会破坏 ABI。通常,您可以在不破坏 ABI 的情况下对类进行以下更改:
- 添加非虚方法
- 重命名私有方法和变量
- 添加静态方法
- 删除私有方法
- 删除私有静态方法
- 添加静态成员变量
- 删除私有静态成员变量
推荐阅读
- docker - 在dockerfile中使用带有tomcat:9.0.45-jdk8-adoptopenjdk-hotspot的docker镜像时如何将shell文件作为入口点运行?
- google-apps-script - 如何将数据记录到指定列的最后一行,而不是所有列的最后一行?
- java - 加载共享库 libstdc++.so.6 时出错:没有这样的文件或目录(需要)
- python - Gekko 最优控制。我不能将一个值保持在其范围内
- angular - 时刻正在将无效的日期字符串转换为日期
- google-cloud-platform - 从 python 获取调度程序作业的状态
- selenium - Selenium 4.X:使用 JavascriptExecutor 单击 webelement 时,EventFiringDecorator 抛出错误
- javascript - mapStateToProps 和 mapDispatchToProps 没有向组件发送道具
- css - 之前和之后的伪元素在顺风 CSS 中不起作用
- python-tesseract - Tesseract 和多行车牌:如何从两行车牌中获取字符?