Linux动态加载共享库,Linux共享库的动态加载(附测试案例)
共享库的动态加载是指可以在程序运行的过程中去加载所需的共享库。常用于某些系统或者应用程序的自动升级。
在C语言的源程序动态加载共享库,需要调用一组特殊的函数,它们被声明于一个专门的头文件dlfcn.h,并在一个独立的库中予以实现。使用这组函数需要包含此头文件,并链接该库。
使用共享库的动态加载时需要用到的函数
1、dlopen函数:打开一个动态链接库,并返回动态链接库的句柄
void *dlopen(const char *filename, int flag);
参数解析:
1)字符串形式的文件名(路径名),主要用于指定共享库文件名
2)加载共享库的方式,常用方式如下:
RTLD_LAZY - 延迟加载
RTLD_NOW - 立即加载
返回值:成功时返回所对应的句柄(地址)信息,失败返回NULL;
2、dlsym函数:根据动态链接库操作句柄与符号,返回符号对应的地址
void *dlsym(void *handle, const char *symbol);
参数解析:
1)表示具体的句柄信息,也就是dlopen函数的返回值;
2)字符串形式的符号/标识符,通常指“函数名”;
返回值:成功返回函数对应的地址信息,失败返回NULL;
3、dlclose函数:用于关闭指定句柄的动态链接库,只有当此动态链接库的使用计数为0时,才会真正被系统卸载。
int dlclose(void *handle);
参数解析:
具体的句柄信息,也就是dlopen函数的返回值。
4、dlerror函数:
可以返回出错信息,返回值为NULL时表示操作函数执行成功。
char *dlerror(void);
参数解析:
具体的句柄信息,也就是dlopen函数的返回值。
该函数主要用于获取dlopen()/dlsym()/dlclose()函数调用期间产生的错误信息,如果没有产生错误,则返回NULL;
这里用上一篇文章中生成的共享库作为需要打开的共享库
链接地址:
Linux C语言高级编程之共享库(附测试案例)
http://www.voidcn.com/article/p-guqysezi-bqy.html
目录结构如下图:
2、测试代码
3、调用方式及结果如下:
这里使用-ldl选项指明生成的对象模块需要使用共享库。
以下是我的个人公众号,主要作为C/C++语言技术分享使用,该公众号里干货满满,如果您有对此博文的疑问或者java方面的问题也可以添加公众号交流讨论。最后,再次希望您能添加关注,互相交流互相学习共同进步:
Linux动态加载共享库,Linux共享库的动态加载(附测试案例)相关推荐
- Linux 静态库和共享(动态)库的创建与使用详解
文章目录 Linux 静态库和共享(动态)库 库的介绍 使用库有什么好处 库制作完成后, 如何给用户使用 静态库(static library) 静态库的制作 ar工具创建lib过程 静态库的使用 源 ...
- Linux基础——gcc编译、静态库与动态库(共享库)
Linux基础--gcc编译.静态库与动态库(共享库) https://blog.csdn.net/daidaihema/article/details/80902012 Linux基础--gcc编译 ...
- Linux C编程之四 动态库(共享库)的制作
一.整体大纲 二.共享库的制作 1. 命名规则: lib + 名字 + .so 2. 制作步骤: 1) 生成与位置无关的代码 (生成与位置无关的.o) 2) 将.o打包成共享库(动态库) 3. ...
- 在Linux平台上如何使用接静态库和共享库
1.Linux函数库介绍 函数库可以看做是事先编写的函数集合,它可以与主函数分离,从而增加程序开发的复用性.Linux中函数库可以有3种使用的形式:静态.共享和动态. 1) 静态库的代 ...
- linux系统中 库分为静态库和,你知道linux 静态库和共享库?
1.静态库和共享库 静态库和共享库(动态库),二者的不同点在于代码被载入的时刻不同. 静态库的代码在编译过程中已经被载入可执行程序,因此体积较大. 共享库的代码是在可执行程序运行时才载入内存的,在编译 ...
- 【转】Linux 静态库与共享库的使用
原文网址:http://blog.csdn.net/heyabo/article/details/11688517 申明: 正如题如示,本篇讲的是Linux下是静态库与共享库,而Window下的动态链 ...
- linux编译静态库的头文件,条件编译,头文件,静态库,共享库与多文件编程
条件编译 条件编译即满足某些条件的时候编译某部分代码,常用于开发多个版本的程序,当满足条件A时,编译出免费版本的软件,当满足条件B时,编译除vip版本的软件,可以提高代码的复用率.条件编译使用&quo ...
- linux 静态库、共享库
一.什么是库 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.由于windows和linux的本质不同,因此二者库的二进制是不兼容的. Linux操作系统支持的函数库分为静态库和 ...
- linux 头文件卫士,条件编译,头文件,静态库,共享库与多文件编程
原标题:条件编译,头文件,静态库,共享库与多文件编程 本文转载自嵌入式Linux中文站条件编译 条件编译即满足某些条件的时候编译某部分代码,常用于开发多个版本的程序,当满足条件A时,编译出免费版本的软 ...
最新文章
- Docker入门之 - 如何安装Docker CE
- python blp模型 估计_第三章 BLP模型(Bell-La Padula模型) | 学步园
- Protocol Buffers 在 iOS 中的使用
- 神经网络激活函数sigmoid、tanh、Relu、LeakyRelu、Elu、PRelu、MaxOut的java实现
- 二、Java面向对象(7)_封装思想——访问修饰符
- php 异步请求微信模板消息_php实现微信模板消息推送
- ios12上滑关闭程序动画_苹果iOS 12.3正式版发布:上滑清除程序动画重新回归
- python 回归 显著_Python数分:回归分析
- ipad服务器未响应怎么办,ipad平板连接Win7系统电脑半天没反应如何解决
- Redis bgsave 线上分析
- 房费制——报表(1)
- vue组件化开发学习笔记-1-组件化开发思想
- 初识 InnoDB存储引擎
- 在线IDE 在线编辑器
- C语言 生成随机数 分析给定范围的随机数生成公式
- 为什么某些网站有些地方打得开,有些地方打不开?
- 计算机专业女生跨专业考研考什么好,计算机专业女生,考研,跨专业,考公务员。...
- linux安装jdk及配置
- Android 分享功能之 微信 图片分享
- pytest和allure生成测试报告
热门文章
- mongo mysql 聚合性能_Mongodb和Mysql的性能分析
- 在网页中使用for (flask框架)
- mac14.5 mojave安装错误
- Exp4 恶意代码分析 20164303 景圣
- 想成为一个高效的Web开发者吗?来看看大牛分享的经验吧~ #精选JAVASCRIPT前端开发...
- Openstack 实战讲解之-----06-计算节点配置
- Centos6 安装NTP 4.2.8 服务器
- 痛并快乐的造轮子之旅:awk访问数据库之旅
- 小组级git服务器搭建
- (双引号)与 ' '(单引号)的区别