C ++中的动态库

时间:2011-01-29 14:06:40

标签: c++ shared-libraries

我有一个使用动态链接库的C ++应用程序。我已将应用程序和库放在目标上并且应用程序正在运行。现在我已经改变了库中的一些东西并创建了库并用新库替换了目标上的旧库。

我的问题是

  1. 应用程序在重新编译和重新链接时是否需要新的库?
  2. 谢谢!

4 个答案:

答案 0 :(得分:1)

是的,但前提是您的新库与旧版本的库兼容。

您可以在网上找到有关它的许多信息。我建议你阅读关于二进制兼容性的this FAQ

答案 1 :(得分:0)

是的,只要界面没有改变。这是动态链接库的一个优点。

答案 2 :(得分:0)

是。该库由动态链接器在运行时加载。只要保留ABI(相同的编译器和版本),您的代码将无缝地使用新代码而无需重新编译。

答案 3 :(得分:0)

如果您只是在讨论二进制兼容性以及是否需要重新编译和重新链接应用程序,那么您应该阅读peoro答案中提供的链接。

但是,我对你的问题的“应用程序正在运行”部分感到有些困惑。如果你的意思是它实际上是在你更换库的那一刻运行的,那么它将不会使用新版本,除非它首先重新启动或者启动了另一个应用程序实例(但是旧的实例仍然会使用旧版)。并非每个操作系统都允许您只替换应用程序正在使用的库,但有一些解决方法。在Windows中,您无法覆盖或删除旧库,但可以在将新版本放入其中之前移动或重命名。 Linux将允许您删除旧版本,如果使用install命令复制新版本,它将自动为您执行。但是在应用程序完成之前,旧版本不会从文件系统中物理删除,它只是不可见。