类和重新编译

Classes And Recompilation

本文关键字:编译 新编译      更新时间:2023-10-16

如果类接口没有改变,但它的实现发生了变化,(以及相应的包含类功能代码的库文件)是否需要重新编译客户端代码(驱动程序应用程序)?

如果在上述更改后不需要重新编译驱动程序应用程序,则可执行文件如何在新库(包含新类的编辑功能)中找到已编辑方法的新位置?

ABI 在很大程度上依赖于编译器供应商和版本。您可能会侥幸不重建驱动程序应用程序,但您必须非常小心。使用纯虚拟成员/函数定义您的接口,并且没有任何数据,最好是在您根本不接触的单独包含中。

必须在加载的模块中替换 .dll 或 .so 文件(或等效文件),方法是移动硬文件或将引用更改为动态链接器将查找 .dll/.so 文件的位置。在 unix/linux 上,通常有一个名为 LD_LIBRARY_PATH 的环境变量

如果类接口没有更改,但其实现发生了更改(以及相应的包含类功能代码的库文件),是否需要重新编译客户端代码(驱动程序应用)?

一般来说,没有。如果你不打破 ABI,那么就没有必要。

可执行文件如何在新库中找到已编辑方法的新位置

与旧库中的方式相同:动态链接器在可执行文件启动时为您对其进行排序。