首页 > 解决方案 > 如果 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()。

在这种情况下,需要重建客户端二进制文件吗?

标签: c++

解决方案


这取决于平台。在大多数平台上,向类添加非虚拟成员函数不会破坏 ABI。通常,您可以在不破坏 ABI 的情况下对类进行以下更改:

  1. 添加非虚方法
  2. 重命名私有方法和变量
  3. 添加静态方法
  4. 删除私有方法
  5. 删除私有静态方法
  6. 添加静态成员变量
  7. 删除私有静态成员变量

推荐阅读