动态加载so库

news/2025/11/8 10:13:59/文章来源:https://www.cnblogs.com/zshsboke/p/19201670

动态加载so库

前置条件

#include <iostream>
extern "C"
void hello(){std::cout << "Hello World from share library!\n";
}

编译动态库

g++ -fPIC -shared hello.cpp -o libhello.so

如果没有extern "C",则会生成类似_Z5hellov的符号

修饰后的字符 含义解读
_Z 所有 C++ 函数修饰的固定前缀(标识这是一个 C++ 符号)
5 紧跟其后的函数名长度(hello 由 5 个字符组成:h-e-l-l-o)
hello 原始函数名
v 函数参数类型编码(v 对应 void,表示函数无参数)

nm

nm -DCU libhello.so
# 0000000000001119 T hello

nm的作用时从二进制目标文件中列出符号表.
-D:用于显示动态符号而非普通符号
-C: --demangle[=STYLE] 解码经过名字修饰(mangled)或处理后的符号名
STYLE 可选值:"none"(不解码)、"auto"(自动检测)、"gnu-v3"(GNU v3 标准)、
"java"(Java 格式)、"gnat"(GNAT 编译器格式)、"dlang"(D 语言格式)、"rust"(Rust 语言格式)
--no-demangle 不解码底层符号名
--recurse-limit 启用名字解码的递归限制(默认启用)
--no-recurse-limit 禁用名字解码的递归限制
-U: Display only defined symbols

readelf

顾名思义,这个命令的含义就是读取elf文件结构的命令。
-h: 打印elf文件的头信息。
-S: 打印段表
-s: 打印符号表
-d: 打印动态依赖

动态加载

#include <dlfcn.h>#include <format>
#include <iostream>
#include <sstream>
#include <vector>int main() {void* handle = dlopen("../libhello.so", RTLD_LAZY);if (handle == nullptr) {throw std::runtime_error("handle == nullptr");}dlerror();typedef void (*helloFunc)(); // 函数指针名称可以随意定义helloFunc hello = (helloFunc)dlsym(handle, "hello");const char* error = dlerror();if (error != nullptr) {std::cerr << "dlsym error: " << error << "\n";dlclose(handle);throw std::runtime_error(std::format("dlsym error: {}", error));}hello();dlclose(handle);return 0;
}

编译运行

g++ main.cpp -ldl -o main
./main

总体分为三步:

  1. 打开共享库dlopen
  2. 查找符号地址dlsym
  3. 调用函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/959491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI元人文:价值权衡范式——环境、价值体系与规则体系的辩证统一

AI元人文:价值权衡范式——环境、价值体系与规则体系的辩证统一 作者:岐金兰 日期:2025年11月8日摘要 随着人工智能从工具性角色迈向决策性参与,其面临的核心挑战已从单纯的技术优化升华为复杂的价值权衡。传统“价…

2025年高活性氢氧化钙厂家权威推荐榜单:熟石灰/高比表氢氧化钙/氢氧化钙颗粒源头厂家精选

在环保政策持续收紧与工业升级的推动下,高活性氢氧化钙以其优越的反应效率和广泛的适用性,正成为烟气脱硫、污水处理等领域的核心材料。 高活性氢氧化钙,特别是高比表面积氢氧化钙,因其更快的反应速度、更高的利用…

行业方案 + VIP 支持!JBoltAI 框架全程帮 Java 团队搞定 AI 应用落地难题

行业方案 + VIP 支持!JBoltAI 框架全程帮 Java 团队搞定 AI 应用落地难题在 AI 重构软件行业的当下,Java 技术团队正面临集体困境:不拥抱 AI 会错失市场先机,盲目尝试却屡屡受阻 —— 传统开发范式与大模型脱节、自…

老Java系统想加AI能力?JBoltAI框架帮改造,AI应用无缝衔接旧系统

老Java系统想加AI能力?JBoltAI框架帮改造,AI应用无缝衔接旧系统一、老 Java 系统 AI 升级困境:三大核心挑战在当今数字化转型的浪潮中,许多企业的老 Java 系统仍然承载着核心业务逻辑,是企业运营的中流砥柱。但随…

嵌入式,liunx内核开发编写笔记 谢双元2023-2024成长历程

稷下元歌 开言qq309647724 微信fgxwan 欢迎嵌入式爱好者 人工智能技术爱好者相互认识,一起成长本人也喜欢种植技术,如有相同趣好,可以交一下好友以下教程是我2023年学习一些油管或外网教程记在本子的文档,因…

《ESP32-S3使用指南—IDF版 V1.6》第四十六章 SD卡模拟U盘实验

第四十六章 SD卡模拟U盘实验 1)实验平台:正点原子DNESP32S3开发板 2)章节摘自【正点原子】ESP32-S3使用指南—IDF版 V1.6 3)购买链接:https://detail.tmall.com/item.htm?&id=768499342659 4)全套实验源码+…

2025年广州ai广告服务权威推荐榜单:广告运营/互联网广告/代运营服务精选

人工智能技术正重塑广告行业格局,广州作为数字营销前沿阵地,已有超过60%的广告服务商将AI技术纳入核心服务体系。 据最新行业统计数据显示,2025年中国AI广告市场规模预计突破892亿元,年复合增长率高达23.5%。在广州…

省4-6个月研发成本!Java AI开发选JBoltAI框架,企业级AI应用极速上线

省4-6个月研发成本!Java AI开发选JBoltAI框架,企业级AI应用极速上线Java 团队的 AI 转型困境在当今数字化时代,人工智能的迅猛发展已深刻改变了软件开发的格局。对于以 Java 技术为主导的开发团队而言,向 AI 领域转…

2025年打包箱房制造企业权威推荐榜单:隔离房/创意集装箱/彩钢房源头厂家精选

在装配式建筑浪潮中,打包箱房以其可重复使用5-8次的特性,正成为临时建筑领域炙手可热的绿色解决方案。 打包箱房作为模块化建筑的重要分支,近年来市场规模持续扩大。据行业报告显示,2025年中国打包箱房市场规模预计…

2025年知名的冷拉型钢杭州老房装修

2025年知名的冷拉型钢杭州老房装修推荐指南 随着杭州老房装修市场的持续升温,冷拉型钢因其高强度、耐腐蚀、易加工等特性,成为现代装修中不可或缺的材料。无论是楼梯扶手、门窗框架,还是室内装饰构件,冷拉型钢都能…

2025年管母线厂家综合实力排行榜:全绝缘铜管母线/管型母线/全屏蔽绝缘铜管母线领先厂家精选

行业数据概览 根据2025年国家电网设备采购数据显示,管母线在变电站建设中的应用占比已达65%,较五年前提升28%。绝缘管型母线的市场渗透率从2020年的35% 增长至58%,预计2026年将突破70%。在节能性能方面,管母线相比…

2025年6月deepseek排名优化跨平台能力推荐排行榜

在AI搜索流量迅速分散的2025年,企业市场部门普遍面临同一痛点:DeepSeek、豆包、通义千问、元宝、Kimi每日迭代,品牌信息却常被算法重新排序,导致曝光骤减。如何锁定稳定排名、让目标客户在不同平台都能一眼看到品牌…

2025年M14连接器插座厂家权威推荐榜单:M14焊线式插座/M14成型式针型插头/M14成型连接器插头源头厂家精选

在工业连接器领域,M14连接器插座以其紧凑的设计和可靠的性能,正成为传感器、工业自动化和机器人设备中的重要接口选择。 随着工业自动化程度的不断提升,M14连接器插座市场需求持续增长。2025年,全球M14连接器市场规…

2025年6月生成式引擎优化推荐榜揭晓五强竞逐AI搜索赛道

把“到底该把预算投向谁”的焦虑先放一边,先回到你最真实的使用场景:品牌部刚做完新品发布,却发现AI搜索里的品牌问答被竞品截胡;电商大促在即,豆包和DeepSeek给出的购买建议里找不到自己SKU;招商团队每天收到“…

2025年11月股权融资律师推荐风向:跨域经验成关键

2025年11月,深圳创投圈再度进入融资旺季,初创公司、成长型企业在Pre-A到C轮之间密集释放股权融资需求。面对尽调清单、投资条款、估值对赌、董事会席位、清算优先权等一连串陌生概念,创始人普遍陷入“时间紧、条款多…

英语_阅读_Robotic_待读

Wang Xingxing, a young man from Ningbo, always believed technology could change lives. 来自宁波的年轻人王星星始终相信,科技可以改变生活。 Though he struggled with English classes, his passion for robot…

终身授权 + 100% 源码!Java AI 开发选 JBoltAI 框架,AI 应用商用无后顾之忧

终身授权 + 100% 源码!Java AI 开发选 JBoltAI 框架,AI 应用商用无后顾之忧对 Java 技术团队而言,AI 应用开发常面临三重困境:对接 AI 能力时封装水平参差不齐,商用后需反复支付授权费用,系统改造阶段缺乏成熟落…

2025年生成式引擎优化六月推荐榜全景解析

六月将至,企业市场部门正为年中冲刺做最后准备。生成式引擎优化已不再是“可做可不做”的试验,而是决定品牌能否被DeepSeek、豆包、通义千问等AI第一时间提及的硬门槛。选型时,决策者普遍面临三大痛点:其一,技术更…

Python+Flask+Prophet 汽车之家二手车框架 逻辑回归 二手车推荐体系 机器学习(逻辑回归+Echarts 源码+文档)✅

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

CSP 2025 考前摆烂记

2025.10.15 Splay 树是一种依靠特殊旋转策略来控制树高,从而使得时间复杂度有保障的一种平衡树。 算法核心 Splay 操作 不难发现,要操作一个点的代价取决于这个点在树中的深度,Splay 操作的核心就是每对一个点操作,…