【C++】 dlopen 和dlsys

最近项目,发现了dlopen的使用,所以总结一下

什么是dlopen和dlsym

  • dlopen是一款Unix系列操作系统下的动态链接库函数,它的主要功能是在程序运行时动态加载指定的共享库(也可称为动态链接库)
  • dlsym是从库中查找函数或者变量

为什么需要dlopen,常用的领域有哪些

  1. 热更新:不用暂停程序,就可以实现库的更新
  2. 模块化架构:将应用划分为多个模块,根据需要加载特定的模块。这样做可以减小应用程序的初始内存占用,并且可以根据当前的功能需求动态调整资源使用
  3. 实现语言桥接: python调用c语言的库

dlopen的使用方法(C++调用C++的so)

  1. 如果你想让某一个函数可以通过dlopen打开,那需要在代码的函数申明的时候,加入关键字
//==============================================================================
// MACROS
//==============================================================================
#ifdef _MSC_VER
#define CP_DLL_PUBLIC __declspec(dllexport)
#else
#define CP_DLL_PUBLIC __attribute__((visibility("default")))
#endif
CP_DLL_PUBLIC
MapWrapper* MapWrapperCreate(WrapperParams  inputParams,WrapperOutputParams outputParams);
  1. 然后编译生成so
  2. hLibrary = dlopen(“xxx.so”),返回一个句柄,就是一个指针
  3. 申明函数指针类型,提前要知道函数的使用方法,
using Depthcreate = int (*)(WrapperParams  inputParams,WrapperOutputParams outputParams);
mapwrapppercreate m_pProcAddr;
  1. 依据句柄,找对应的函数地址,获取函数指针 m_pProcAddr = dlsym(hLibrary, “DepthMapWrapperCreate”);
  2. 这样就可以使用改函数了,连头文件也不需要

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

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

相关文章

STM32F103 USB 端口的电阻配置

参考ST 官方的STLINK V2 电路图,如下: STLINK V2 的主控是STM32F103CBT6,USB 端口电路在左下角。DP,DM 上串的是0 Ω 电阻,所以103 系列芯片应该是内置了匹配电阻,外置的22Ω 可以去掉了。DP 外接了1.5K 上…

VirtualBox7.0.16的蓝屏大坑与ssh登陆ubuntu虚拟机的办法

背景: 安装了最新版的VirtualBox,装了ubuntu系统,在win10下通过ssh死活无法与ubuntu进行正常登陆控制。 然后开始了踩坑。 问题1:ssh登陆失败,但是主机能ping通ubuntu,反过来也能ping通,网络…

Anaconda 修改国内镜像源

Anaconda 修改国内镜像源 参考地址 打开文件资源管理器,在地址栏中输入%APPDATA%按回车跳转到目标目录; 在目录下创建一个pip文件夹,再其内部创建一个pip.ini文件; pip.ini文件中输入以下信息。 以阿里云镜像源为例&#xff1…

数组和指针经典笔试题讲解

目录 创作不易,如对您有帮助,还望一键三连,谢谢!!! 1.sizeof和strlen的对比 1.1sizeof 1.2strlen 1.3sizeof和strlen对比 2.数组笔试题讲解 数组名的理解 2.1一维数组 2.2字符数组 题目一&#x…

如何在自己的网站页面中嵌入一个【悬浮音乐播放器】

如何嵌入【悬浮音乐播放器】 前言正文1.打开网易云网页版2.设置自己想要的高度和宽度看注意事项 3.选择是否为自动播放4.在header.php文件中</head>标签前插入下面代码5.在heard.php 中<body>标签后边增加一个 div层6.复制播放器代码到\<div>标签的里边7.保存…

【MySQL】基础知识

1、安装配置环境 数据库版本&#xff1a;MySQL8.3版本图形界面&#xff1a;Navicat premium 2、关于数据存储 MySQL 数据库系统从大到小依次是数据库服务器、数据库、数据表、数据表的行与列。一个完整的数据存储过程总共有 4 步&#xff0c;分别是创建数据库、确认字段、创建…

sheng的学习笔记-AI-支持向量机(SVM)

目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 目录 什么是向量机 SVM算法原理 SVM基本模型 SVM对偶问题 什么是对偶问题&#xff1a; 为什么使用对偶问题 拉格朗日定理 拉格朗日乘子法 对偶问题算法 非线性SVM算法原理 核函数 常用核函数 软间隔与正则化 软…

链栈的基本操作(链表实现)

目录 定义 我们这篇文章讲的是链栈的实现 链栈的基本操作 定义链栈 初始化栈 判断栈是否为空 入栈 出栈 获取栈顶元素 销毁栈 测试完整代码 定义 栈&#xff08;Stack&#xff09;是一种遵循后进先出&#xff08;LIFO&#xff0c;Last In First Out&#xff09;原则…

开发日志(20240422):一次以为是跨域但并不是跨域的问题排查记录

1. 日志 在前后端联调的时候&#xff0c;遇到了报错&#xff0c;如下图所示&#xff08;现在再看感觉非常简单了&#xff09;&#xff0c;发现前一个请求通过了&#xff0c;但是第二个请求报错&#xff0c;然后看到 strict-origin-when-cross-origin 条件反射的认为是跨域配置…

谷歌SEO算法更新发展史:谷歌SEO优化排名背后的密码

谷歌&#xff0c;作为全球最大的搜索引擎&#xff0c;其算法的更新和变化一直牵动着数亿网民的心。每一次算法的更新都是对搜索引擎排名的一次大洗牌&#xff0c;影响着网站的流量和在搜索结果中的排名。从2000年的初创时期到现在&#xff0c;谷歌的算法更新已经走过了近二十年…

Java web应用性能分析之【sysbench基准测试】

Java web应用性能分析之【CPU飙高分析之MySQL】-CSDN博客 Java web应用性能分析之【Linux服务器性能监控分析概叙】-CSDN博客 Java web应用性能分析概叙-CSDN博客 Java web应用性能分析之【基准测试】-CSDN博客 上面基本科普了一下基准测试&#xff0c;这里我们将从sysbench…

深入浅出 Transformer

Transformer 背后的核心概念&#xff1a;注意力机制、编码器-解码器架构、多头注意力等等。 一、理解注意力机制 注意力机制能够集中注意力在输入序列的某些部分&#xff0c;同时忽略其他部分&#xff0c;就像我们人类在理解句子时关注特定的单词或短语一样。 自注意力是种特…

眼图仪参数理解和一些测量指标

参考资料&#xff1a; https://www.eet-china.com/mp/a35960.html 一&#xff1a;关于眼图仪&#xff1a; :::warning ●如果追溯历史&#xff0c;大约47年前&#xff0c;眼图就已经开始广泛应用。在1962年-2002的40年间&#xff0c;眼图的测量方法是基于采样示波器的传统方法…

C++默认构造函数的合成

编译器只在编译期需要的时候合成默认构造函数&#xff0c;而不是在用户需要的时候 文章目录 引入编译器合成默认构造函数的四种情况情况一 类中包含带有默认构造函数的类的成员对象情况二 派生类的基类带有默认构造函数情况三 类带有一个虚函数情况四 派生自一个虚基类的类 参考…

Day53|动态规划part14: 1143.最长公共子序列、1035. 不相交的线、53. 最大子序和

1143. 最长公共子序列 这题有点像递增子序列和公共子数组的组合&#xff0c; 要求公共子序列不一定非要是连续的。 确定dp数组下标及其含义 dp[i][j]表示text1[i - 1]与text2[j - 1]结尾的最高公共子序列。 长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的…

SHELL脚本编程----netstat练习3-输出每个IP的连接数

描述 假设netstat命令运行的结果我们存储在nowcoder.txt里&#xff0c;格式如下&#xff1a; Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:6160 0.0.0.0:* LISTEN tcp 0 0…

Redis 服务等过期策略和内存淘汰策略解析

redis服务是基于内存运行的&#xff0c;所以很多数据都存放在内存中&#xff0c;但是内存又不是无限的&#xff0c;所以redis就引出了key的过期和淘汰策略。 一、Redis的过期策略&#xff1a; 我们在set key的时候&#xff0c;可以给它设置一个过期时间&#xff0c;比如expire …

区块链 | ERC721 标准

目录 正文 1 ERC721 接口 事件 方法 2 ERC165 接口 3 可选实现接口&#xff1a;ERC721Metadata 4 可选实现接口&#xff1a;ERC721Enumerable 补充说明 1 NTF IDs 2 与 ERC-20 的兼容性 3 交易、挖矿、销毁 &#x1f955;原文&#xff1a;剖析非同质化代币 E…

golang wire 依赖注入

1 安装wire 1.1 通过命令直接安装 go install github.com/google/wire/cmd/wirelatest 1.2 通过go get方式安装 go get github.com/google/wire/cmd/wire进入目录编译 cd C:\Users\leell\go\pkg\mod\github.com\google\wirev0.6.0\cmd\wire go build 然后将wire.exe移动到…

【神经网络结构可视化】PlotNeuralNet的安装、测试及创建自己的神经网络结构可视化图形

文章目录 前提准备1、下载MikTeX2、下载Git bash3、下载PlotNeuralNet 进行测试1、解压PlotNeuralNet-master.zip2、打开Git bash3、 在my_project中查看生成的pdf文件 创建自己的神经网络结构可视化图形 前提准备 1、下载MikTeX 下载链接&#xff1a; MikTeX ( https://mikt…