当前位置: 首页 > news >正文

编译链接实战(27)动态库实现变了,可执行程序需要重新编译吗

文章目录

    • **1. 兼容性变更(无需重新编译)**
      • **场景:动态库内部实现改变,但接口不变**
        • **步骤 1:创建动态库和可执行程序**
        • **步骤 2:修改动态库实现(不改变接口)**
        • **步骤 3:直接运行旧的可执行程序**
    • **2. 不兼容变更(需要重新编译)**
      • **场景 1:函数接口变更(参数类型或返回值变化)**
        • **步骤 1:初始代码(同前)**
        • **步骤 2:破坏接口兼容性**
        • **步骤 3:尝试运行旧程序**
      • **场景 2:删除或重命名符号**
        • **步骤 1:初始代码(同前)**
        • **步骤 2:删除 `add` 函数**
        • **步骤 3:尝试运行旧程序**
      • **场景 3:结构体内存布局变化**
        • **步骤 1:初始代码**
        • **步骤 2:修改结构体布局**
        • **步骤 3:尝试运行旧程序**
    • **验证工具**
    • **总结**

先看结论:

(1) 兼容性变更(无需重新编译)

  • 行为变更但接口不变
    若动态库的内部实现逻辑改变(如修复 bug、优化算法),但以下内容保持不变:
    • 函数/变量的 符号名称参数类型返回值类型
    • 结构体/类的 内存布局(如成员顺序、大小)
    • 全局数据的 符号可见性
      结论:无需重新编译,只需替换动态库(如 libfoo.so.1.0 → libfoo.so.1.1)。
  • 仅增加新接口
    在库的次要版本更新中新增函数或变量,但不影响现有接口。
    结论:无需重新编译旧程序。

(2) 不兼容变更(需要重新编译)

  • 接口变更
    如:
    • 删除或重命名函数/变量
    • 修改函数参数类型或返回值类型
http://www.xdnf.cn/news/1057321.html

相关文章:

  • 互联网思维概念和落地
  • 如何写一个简单的python类class
  • 影视剧学经典系列-梁祝-《闲情赋》
  • 如何让DeepSeek-R1-Distill-Qwen-32B支持Function calling
  • 学习昇腾开发的第三天--将服务器连接网络
  • 【锂电池剩余寿命预测】XGBoost锂电池剩余寿命预测(Pytorch完整源码和数据)
  • 外观模式Facade Pattern
  • 02- 六自由度串联机械臂(ABB)运动学分析
  • C++面向对象编程:简洁入门
  • RPG29:制作ui基础
  • YoloV12改进策略:Block改进|MKP,多尺度卷积核级联结构,增强感受野适应性|即插即用|AAAI 2025
  • 命令模式Command Pattern
  • 多线程并发编程硬核指南:从互斥锁到生产者模型的全场景实战与原理揭秘
  • C++(初阶)(二十一)——unordered_set和unordered_map
  • Addressable-引用计数
  • DDD领域驱动设计学习路线
  • VS202静态库制作和使用指南
  • 【Android】输入路由
  • 将CVAT点云格式标注格式由datumaro转换为kitti格式
  • 软件测试用例(一)
  • Java锁机制:ReentrantLock深度解析与锁粒度优化实践(时序图详解)
  • 交互式编程:编程范式的静默革命
  • 在windows10上安装nvm以及配置环境
  • 【推荐】城市灾害应急管理系统【面试模拟题目——字节跳动面试原题】
  • java复习 13
  • (二十八)深度解析领域特定语言(DSL)第六章——语法分析:巴科斯-诺尔范式
  • 适合 Acrobat DC 文件类型解析
  • 6.15 操作系统面试题 锁 内存管理
  • Appium + .NET 测试全流程
  • 【模拟 贪心】B4207 [常州市赛 2021] 战士|普及+