当库更新时,我应该重新编译程序

when a library updates, should I recompile the program

本文关键字:编译程序 我应该 更新      更新时间:2023-10-16

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

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

谢谢

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

对象大小

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

int main(int argc, char * argv[])
{
  MyClass list[12];
  return 0;
}

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

您应该进一步阅读两个关键字:源代码兼容性,这意味着您的程序在更新库后仍将编译,以及二进制兼容性,这意味着您的编译程序在更新库后仍将正常运行。

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

有一些自动化工具可以测试二进制和源代码兼容性(例如这个)。

这个问题有两个

答案:否是。

如果库只有次要更新,或者新功能是以向后兼容的方式添加的,则无需执行任何操作。当然,除非你想使用新功能,否则你必须修改你的代码并重新编译它。

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