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

时间:2014-04-01 13:50:07

标签: c++ shared-libraries

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

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

感谢

3 个答案:

答案 0 :(得分:1)

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

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

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

  return 0;
}

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

答案 1 :(得分:1)

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

大多数主要库(例如glibclibpng)对于长版本范围保持二进制兼容(通常所有版本的主要版本都是二进制兼容的),并且几乎不会破坏源兼容性。< / p>

有自动工具可以测试二进制和源兼容性(例如this one)。

答案 2 :(得分:0)

这个问题有两个答案:没有 是。

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

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