C+中的动态库+; 我有一个C++应用程序,它使用动态链接库。我已将应用程序和库放置在目标位置,并且应用程序正在运行。现在我改变了图书馆里的一些东西,制作了图书馆,并用新图书馆取代了旧图书馆

C+中的动态库+; 我有一个C++应用程序,它使用动态链接库。我已将应用程序和库放置在目标位置,并且应用程序正在运行。现在我改变了图书馆里的一些东西,制作了图书馆,并用新图书馆取代了旧图书馆,c++,shared-libraries,C++,Shared Libraries,我的问题是 应用程序是否在不重新编译和重新链接的情况下获取新库 谢谢 是的,只要界面没有改变。这是动态链接库的一个优点。是的。库在运行时由动态链接器加载。只要ABI被保留(相同的编译器和版本),您的代码将无缝地使用新代码,而无需重新编译。是的,但前提是您的新库与旧库ABI兼容 你可以在网上找到很多关于它的信息。我建议您阅读有关二进制兼容性的内容。如果您只是在谈论二进制兼容性以及是否有必要重新编译和重新链接应用程序,那么您应该阅读peoro回答中提供的链接 然而,我对您问题中的“应用程序正在运行”

我的问题是

  • 应用程序是否在不重新编译和重新链接的情况下获取新库

  • 谢谢

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

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

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


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

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

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