当库更新时,我应该重新编译程序吗 如果用C++编写的共享库更新(只添加一些新的类成员函数),我是否应该重新编译整个程序?

当库更新时,我应该重新编译程序吗 如果用C++编写的共享库更新(只添加一些新的类成员函数),我是否应该重新编译整个程序?,c++,shared-libraries,C++,Shared Libraries,我添加一些公共或私有数据成员如何 谢谢这个问题有两个答案:否和是 如果库只有一个小的更新,或者新功能是以向后兼容的方式添加的,那么您不需要做任何事情。当然,除非您想使用新函数,否则必须修改代码并重新编译 另一方面,如果库进行了一些不向后兼容的更改,那么您可能至少需要重新链接您的项目。但是,如果您安装了这样一个向后不兼容的库,操作系统可能会保留旧版本,因此您的应用程序可能会使用旧版本,而您无需执行任何操作。只要它是一个共享库,与主程序动态链接,不,您不需要,除非您更新了主应用程序和库之间共享的标题

我添加一些公共或私有数据成员如何


谢谢这个问题有两个答案:否和是

如果库只有一个小的更新,或者新功能是以向后兼容的方式添加的,那么您不需要做任何事情。当然,除非您想使用新函数,否则必须修改代码并重新编译


另一方面,如果库进行了一些不向后兼容的更改,那么您可能至少需要重新链接您的项目。但是,如果您安装了这样一个向后不兼容的库,操作系统可能会保留旧版本,因此您的应用程序可能会使用旧版本,而您无需执行任何操作。

只要它是一个共享库,与主程序动态链接,不,您不需要,除非您更新了主应用程序和库之间共享的标题

对象大小可能已更新,如果在主程序上使用静态分配,则可能会产生奇怪的问题(新对象大小将溢出):


在动态库上更改MyClass的对象大小(通常通过添加成员)将是一个严重的问题

您应该进一步阅读以下两个关键词:源代码兼容性,这意味着更新库后您的程序仍将编译;以及二进制兼容性,这意味着更新库后您编译的程序仍将无问题运行

大多数主要库(如
glibc
libpng
)在长版本范围内保持二进制兼容(通常主要版本的所有版本都是二进制兼容的),并且几乎从不中断源代码兼容性


有自动工具来测试二进制和源代码兼容性(例如)。

因此,正如您自己总结的那样,在某些情况下,您确实需要重新编译。
int main(int argc, char * argv[])
{
  MyClass list[12];

  return 0;
}