繁体   English   中英

C ++中的动态库

[英]dynamic library in C++

我有一个使用动态链接库的C ++应用程序。 我已将应用程序和库放在目标上,并且应用程序正在运行。 现在,我已经更改了库中的某些内容,并制作了库,然后将目标上的旧库替换为新库。

我的问题是

  1. 应用程序是否无需重新编译和重新链接即可获取新的库文件?

谢谢!

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

您可以在网上找到许多有关它的信息。 我建议您阅读有关二进制兼容性的常见问题解答

是的,只要界面没有变化即可。 这是动态链接库的优势之一。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM