【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.mfbz.cn/a/577960.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Markdown 对勾符号

Markdown中根号符号不完美,少了上面一横,更像对勾:√ 输入: 即可显示为: 在 youtrack 上面的 KB 页面,也适用。 Markdown 对勾符号 - 文档交付 - iSharkFlyMarkdown中根号符号不完美,少了上面一…

配置Trunk

1、实验目的 通过本实验可以掌握: Native VLAN 的含义和配置。IEEE802.1q 封装。Trunk 配置和调试方法。 2、实验拓扑 配置 Trunk 的实验拓扑如下图所示。 3、实验步骤 3.1 在交换机S1、S2上创建 VLAN 并把端口划分到相应的VLAN中 (1)配…

【网络安全】HTTP协议 — 基础

专栏文章索引:网络安全 有问题可私聊:QQ:3375119339 目录 学习目标​ 一、万维网的诞生与发展​编辑 1.万维网的诞生与发展 2.HTTP协议诞生与发展 二、网络基础 1.TCP/IP分层传输 1)TCP/IP协议 2)封装与拆封 …

初步认识Vscode

4.26初步认识Vscode (一)快捷键的使用 1. 打开控制端 ctrl ~2. 结束终端 ctrl c3. 多行同时对齐输出 按住shift alt 光标多选4. 多行同时任意位置输出 按住alt 光标单点你想要输入的位置5. 代码太长了,想混行编辑 alt z6. 打开设置控制…

C++ AVL树

文章目录 AVL树的概念AVL树基本框架AVL树的插入AVL树的插入(无旋转)AVL树的插入(旋转操作)单旋双旋旋转代码 上面我们知道二叉搜索树在特殊情况下查找的时间复杂度为O(N), 所以为了解决二叉搜索树不稳定的问题,我们引入…

关于OSPF报文学习

目录 一.OSPF学习补充 (1)OSPF报文头部 (2)ospf建立邻居关系 1.Hello报文——建立邻居关系 2.hello报文头部 (3)OSPF建立邻接关系 1.发送DD报文 2.DD报文头部 (4)关于DR,BD…

深入OceanBase内部机制:分区机制构建高可用、高性能的分布式数据库基石

码到三十五 : 个人主页 在数据库技术的发展历程中,随着数据量的不断增长和业务需求的日益复杂,如何高效地存储、查询和处理数据成为了关键挑战。OceanBase作为一款高性能、高可用的分布式关系数据库,通过其独特的分区机制&#xf…

03 spring-boot+mybatis+jsp 的增删改查的入门级项目

前言 主要是来自于 朋友的需求 项目概况 就是一个 用户信息的增删改查然后 具体到业务这边 使用 mybatis xml 来配置的增删改查 后端这边 springboot mybatis mysql fastjson 的一个基础的增删改查的学习项目, 简单容易上手 前端这边 jsp 的 基础的试题的增删改查 学习项…

Shell脚本学习记录

0.理解Linux文件权限 0.1 Linux安全性 用户的权限是通过创建用户时分配的用户ID(UID)来追踪的,UID是个数值,每个用户都有一个唯一的UID 0.1.1 /etc/passwd文件 Linux系统使用一个专门的文件/etc/passwd来匹配登录名与对应的UID值,该文件包…

本地体验最强开源模型Llama3+Qnw(支持Windows和Mac)

一键运行大模型本地软件(含模型):点击下载 Meta放出Llama3模型了,也应该是这段时间里的一个科技大新闻了。 Llama一直都是开源大语言模型的领头羊驼。 而Llama3又是所有羊驼中最新的领头羊。 可以简单地来看一下官方的对比数据…

Open-Sora:开源版的Sora

项目简介 本项目希望通过开源社区的力量复现Sora,由北大-兔展AIGC联合实验室共同发起,当前我们资源有限仅搭建了基础架构,无法进行完整训练,希望通过开源社区逐步增加模块并筹集资源进行训练,当前版本离目标差距巨大&…

FSMC读取FPGA的FIFO

一、硬件说明 FSMC配置 单片机的代码如下: #define VALUE_ADDRESS_AD1 (__IO uint16_t *)0x60400000while (1){if(!HAL_GPIO_ReadPin(GPIOF, GPIO_PIN_8)) //数据非空{data *(__IO uint16_t *)VALUE_ADDRESS_AD1;data2 *(__IO uint16_t *)VALUE_ADDRESS_AD1…

C语言:插入排序

插入排序 1.解释2.步骤3.举例分析示例结果分析 1.解释 插入排序是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采…

Qt中的 tableView 设置 二进制 十六进制 序号表头

二 进制序号 因为QTableView的垂直表头并不支持使用委托来自定义。 相反&#xff0c;可以通过将自定义的QWidget作为QHeaderView的标签来实现这一目标。 代码&#xff1a; #include <QApplication> #include <QMainWindow> #include <QVBoxLayout> #include …

使用LSTM模型对心跳时间序列数据预测(Python代码,ipynb环境)

所用模块版本&#xff1a; matplotlib3.7.1 numpy1.24.4 pandas1.5.3 scikit_learn1.2.2 scipy1.10.1 seaborn0.12.2 statsmodels0.14.0 torch1.13.1 torch2.0.1 wfdb4.1.2 主代码&#xff1a; import itertools import pandas as pd import matplotlib.pyplot as plt #完整…

elasticsearch 常用语法汇总

文章目录 前言elasticsearch 常用语法汇总1. 创建索引2. 检索索引信息3. 删除索引4. 文档操作4.1. 对blog_new索引指定文档ID新增4.2. 对blog_new索引不指定文档ID新增&#xff0c;随机文档ID:4.3. 获取文档4.4. 更新文档4.5. 删除文档 5. 查询5.1. 匹配查询5.2. 范围查询5.3. …

计算机视觉的应用29-卷积神经网络(CNN)中的变种:分组卷积、转置卷积、空洞卷积的计算过程

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用29-卷积神经网络(CNN)中的变种&#xff1a;分组卷积、转置卷积、空洞卷积的计算过程。分组卷积将输入通道分为几组&#xff0c;对每组独立进行卷积操作&#xff0c;以减少计算量和模型参数。转置卷…

vue如何发送请求给后端(包括前后端跨域)

目录 有哪些方法可以发送请求要请求先解决跨域问题代理服务器后端解决跨域问题 axios发送请求vue-resource发送请求 有哪些方法可以发送请求 以前可能了解过&#xff1a; xhr 即&#xff1a;new XMLHttpRequest()jQuery 即&#xff1a;$.get $.postaxios fetch 在vue中特有的…

Leetcode 剑指 Offer II 075.数组的相对排序

题目难度: 简单 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定两个数组&#xff0c;arr1 和 arr2&#xff0c; arr2 中的元…

Java NIO

1. IO分类概述 1.1 阻塞与非阻塞 阻塞&#xff08;Blocking&#xff09;和非阻塞&#xff08;Nonblocking&#xff09;是在计算机编程中用于描述I/O操作的两个重要概念。阻塞与非阻塞描述的是线程在访问某个资源时&#xff0c;在该资源没有准备就绪期间的处理方式。 1、阻塞&a…