如果用C ++编写的共享库更新(只添加一些新的类成员函数),我应该重新编译整个程序吗?
我如何添加一些公共或私人数据成员?
感谢
答案 0 :(得分:1)
只要它是一个共享库,与您的主程序动态链接,除非您更新了主应用程序和库之间共享的标题,否则不要这样做。
对象大小可能已更新,如果在主程序上使用静态分配,则可能会产生奇怪的问题(新对象大小会溢出):
int main(int argc, char * argv[])
{
MyClass list[12];
return 0;
}
在动态库上更改MyClass的对象大小(通常通过添加成员)将是一个严重的问题!
答案 1 :(得分:1)
您应该进一步阅读以下两个关键字:源兼容性,这意味着您的程序在更新库后仍会编译,并且二进制兼容性,这意味着更新库后,编译后的程序仍然可以正常运行。
大多数主要库(例如glibc
或libpng
)对于长版本范围保持二进制兼容(通常所有版本的主要版本都是二进制兼容的),并且几乎不会破坏源兼容性。< / p>
有自动工具可以测试二进制和源兼容性(例如this one)。
答案 2 :(得分:0)
这个问题有两个答案:没有 和 是。
如果库只有次要更新,或者以向后兼容的方式添加新功能,那么您不需要做任何事情。除非您想要使用新功能,否则您必须修改代码并重新编译它。
另一方面,如果库已经进行了一些不向后兼容的更改,那么可能必须至少重新链接您的项目。但是,如果您安装这样一个向后兼容的库,操作系统可能会保留旧版本,因此您的应用程序可能会使用旧版本而您不必执行任何操作。