类和重新编译

时间:2013-12-27 17:55:52

标签: c++ abi

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

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

2 个答案:

答案 0 :(得分:2)

ABI非常依赖于编译器供应商和版本。你可能不会重建驱动程序应用程序,但你必须非常小心。使用纯虚拟成员/函数定义您的界面,而不是任何数据,最好是单独包含您根本不接触的内容。

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

答案 1 :(得分:1)

  

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

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

  

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

与旧库中的方式相同:dynamic linker在您的可执行文件启动时为您排序。