类和重新编译
Classes And Recompilation
如果类接口没有改变,但它的实现发生了变化,(以及相应的包含类功能代码的库文件)是否需要重新编译客户端代码(驱动程序应用程序)?
如果在上述更改后不需要重新编译驱动程序应用程序,则可执行文件如何在新库(包含新类的编辑功能)中找到已编辑方法的新位置?
ABI 在很大程度上依赖于编译器供应商和版本。您可能会侥幸不重建驱动程序应用程序,但您必须非常小心。使用纯虚拟成员/函数定义您的接口,并且没有任何数据,最好是在您根本不接触的单独包含中。
必须在加载的模块中替换 .dll 或 .so 文件(或等效文件),方法是移动硬文件或将引用更改为动态链接器将查找 .dll/.so 文件的位置。在 unix/linux 上,通常有一个名为 LD_LIBRARY_PATH 的环境变量
如果类接口没有更改,但其实现发生了更改(以及相应的包含类功能代码的库文件),是否需要重新编译客户端代码(驱动程序应用)?
一般来说,没有。如果你不打破 ABI,那么就没有必要。
可执行文件如何在新库中找到已编辑方法的新位置
与旧库中的方式相同:动态链接器在可执行文件启动时为您对其进行排序。
相关文章:
- 使用 MINGW gcc 编译时,不会为 std::string 调用重载的新运算符
- 如何编译:Mac上的Synergy(2017年的新工具链)
- 如何编译和运行一个新的 C++ Actor 框架项目?
- C++编译新的警告过滤器
- 每次都构建(make)lib,只有在lib较新时才重新编译项目
- 如何创建指向派生类的新指针,该派生类在C++编译时未知
- 如何在不退出和失去断点的情况下重新加载重新编译的二进制文件
- 在编译时将整数和分数部分宏组合成一个新的宏或双精度
- C++运算符新重载、编译错误
- 在新OSX上编译旧碳应用
- 为什么G 5.4不能编译此编译时质数代码
- 代码块在尝试编译或创建新文件时出现"An assertion failed!"错误
- 在新的Visual Studio项目中包含任何Eigen 3.3.1文件将无法编译
- RCpp:如何在不重新启动R的情况下重新加载重新编译的C++代码
- 新安装的MinGW问题与编译和可执行文件
- 为什么要编译?(编译是否忽略未包含的 h 文件?
- 高级C和C++编译:无法编译书中提到的示例程序
- 在不同的编译单元中使用不同的编译标志编译相同的头
- 在cygwin中编译新的mingw二进制文件
- 使用boost库编译预编译头文件需要很长时间