2014-04-01 234 views

回答

0

有两种回答这个问题:没有肯定。

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

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

1

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

对象大小可能已被更新,如果你在你的主程序使用静态分配,能够创造奇怪的问题(新对象大小会溢出):(加入成员通常)

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

    return 0; 
} 

更改对象大小MyClass的一个动态库将是一个严重的问题!

+0

因此,正如你自己总结的那样,在某些情况下,你**必须重新编译。 –

1

有两个关键字,你应该做进一步读成:源代码兼容性,这意味着你的程序将在更新库后,仍然编译和二进制兼容性,这意味着你的编译程序将仍然运行没有问题更新库后。

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

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

相关问题