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

Linux动态库热加载:动态库与主程序符号调用机制总结

1、动态库可以调用主程序的符号

  • 主程序的符号在全局符号表中
    主程序编译链接后,全局符号默认暴露在符号表,供动态链接器查找。
  • 动态库加载时会加载所有依赖的符号
    当用 dlopen 加载动态库时,动态链接器会自动在主程序符号表中查找动态库需要的符号。
  • 主程序和动态库共享同一个地址空间
    动态库与主程序运行在同一进程内,因而可以直接访问对方的内存和符号。

2、主程序不能直接调用动态库的符号

  • 动态库的符号默认不可见
    编译动态库时,符号通常被隐藏,除非显式导出。
  • 需要显式导出才能使用
    主程序想调用动态库的函数,必须通过导出接口(如 __attribute__((visibility("default"))) 或 Windows 的 __declspec(dllexport))保证符号可见。
  • 可能存在 ABI 兼容性问题
    动态库与主程序必须遵循相同的调用约定和数据类型规范,否则调用会失败。

3、实践建议

  • 插件模式设计
    让动态库调用主程序导出的接口(如单例工厂),动态库通过该接口注册自身,实现插件机制。
  • 主程序调用动态库函数
    使用 dlsym 动态查找动态库导出符号地址,避免符号不可见问题。
  • 保证 ABI 兼容性
    确保主程序和动态库的编译选项、调用约定、数据结构对齐一致。
  • 使用 extern "C" 避免 C++ 名字修饰
    导出接口采用 C 语言风格,避免因 C++ 名字修饰导致符号查找失败。
http://www.xdnf.cn/news/472519.html

相关文章:

  • 6、登录功能后端开发
  • MobaXterm 25.2中文汉化版优秀的远程桌面管理软件
  • vue2 根据不同路由url设置不同的网页背景颜色
  • 企业EcoVadis评估问卷实战指南:步骤拆解与避坑策略
  • centos7 基于yolov10的推理程序环境搭建
  • 多语言支持的常见设计方案
  • C语言-指针函数和函数指针
  • 【Linux】网络基础与socket编程基础
  • 深入理解JavaScript中的闭包:原理、应用与常见问题
  • 【stata】xtreg VS reghdfe
  • 位运算题目:找到最接近目标值的函数值
  • 新手入门系列-springboot项目初体验
  • C盘清理秘籍:快速提升系统性能
  • Python 调试扩展版本兼容问题解决纪实
  • 在自动化脚本中使用找色实现精确定位目标区域
  • docker 学习记录
  • uniapp x
  • 软件安全测试报告:检测商业软件安全性,发现潜在风险点?
  • 修复“ImportError: DLL load failed while importing lib: 找不到指定的程序”笔记
  • MySQL 误删除数据恢复全攻略:基于 Binlog 的实战指南
  • 深度学习入门:深度学习(完结)
  • 张量与Python标量:核心区别与计算图断开解析
  • 白平衡模块中普朗克曲线拟合硬件实现的猜想
  • ElfBoard技术实战|ELF 2开发板本地部署DeepSeek大模型的完整指南
  • MyBatis 的分页插件 c
  • 国产芯片LH001-91为什么可以代替TI的ADS1291?
  • 观QFramework框架底层逻辑有感
  • 丝杆升降机限位失灵深度剖析:从故障机理到智能监测方案
  • 硬件创新新纪元:从算力怪兽到便携革命,2025 年如何重新定义计算体验
  • unordered_set和unordered_map