阐述Linux动态库的显式调用
阐述Linux动态库的显式调用
十年的发展,Linux系统已经赶上了微软,于是很多人开始学习Linux时,学习Linux,你可能会遇到动态库的显式调用,这里将介绍动态库的显式调用的解决方法,在这里拿出来和大家介绍下。
显式调用的含义是代码出现库文件名,用户需要自己去打开和管理库文件。其要点为:
⑴把dlfcn.h系统头文件包含进来
⑵用dlopen函数打开库文件,并指定打开方式
dllope的的第一个参数为共享库的名称,将会在下面位置查找指定的共享库。
①环境变量LD_LIBRARY_PATH列出的用分号间隔的所有目录。
②文件/etc/ld.so.cache中找到的库的列表,由ldconfig命令刷新。
③目录usr/lib。
④目录/lib。
⑤当前目录。
第二个参数为打开共享库的方式。有两个取值
①RTLD_NOW:将共享库中的所有函数加载到内存
②RTLD_LAZY:会推后共享库中的函数的加载操作,直到调用dlsym()时方加载某函数
⑶用dlerror()函数测试是否打开成功,并进行错误处理;
⑷用dlsym获得函数地址,存放在一个函数指针中
⑸用获得的函数指针进行函数调用。
⑹程序结束时用dlclose关闭打开的动态库,防止资源泄露。
⑺用ldconfig工具把动态库的路径加到系统库列表中
1、编写测试文件
- //main.c 测试动态库显式调用的程序
- #include<dlfcn.h> //用于动态库管理的系统头文件
- #include "myalib.h"//要把函数的头文件包含进来,否则编译时会报错
- int main(int argc,char* argv[])
- {
- //声明对应的函数的函数指针
- void (*pTest)();
- //加载动态库
- void *pdlHandle = dlopen("libtest.so", RTLD_LAZY);
- //错误处理
- if(pdlHandle == NULL ){
- printf("Failed load library/n");
- return -1;
- }
- char* pszErr = dlerror();
- if(pszErr != NULL)
- {
- printf("%s/n", pszErr);
- return -1;
- }
- //获取函数的地址
- pTest = dlsym(pdlHandle, "test");
- pszErr = dlerror();
- if(pszErr != NULL)
- {
- printf("%s/n", pszErr);
- dlclose(pdlHandle);
- return -1;
- }
- //实现函数调用
- (*pTest)();
- //程序结束时关闭动态库
- dlclose(pdlHandle);
- return 0;
- }
2、编译测试文件
使用-ldl选项指明生成的对象模块需要使用共享库
gcc -o main -ldl main.c
执行完后就生成了一个main文件
3、执行测试程序
执行 ./main
输出
test
说明成功。这就是Linux动态库的显式调用的介绍。
阐述Linux动态库的显式调用相关推荐
- VS2019 - 动态库的编写和调用
VS2019 - 动态库的编写和调用 完善自己知识体系的一些内容: 用C++编写的DLL(动态链接库)中,导出类的接口封装方法总结 详解dll的封装,以及三种调用方法(将±×÷封装为例) 1 VS20 ...
- 【Linux】静态库与动态库的生成及调用
一,库:一种可执行代码的二进制形式,可以被载入内存执行.其中库分为静态库.动态库 二,静态库和动态库的区别 1)Linux 下静态库:名字一般为 lib***.a利用静态函数库编译成 ...
- Linux 动态库的显示调用
Linux 动态库的显示调用 分类: 动态库与静态库 2012-03-17 23:56 1710人阅读 评论(0) 收藏 举报 linuxnulllibrary测试web服务apache 10.动态库 ...
- 分析Windows和Linux动态库
摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理.但不同操作系 ...
- Windows和Linux动态库比较 (Zhuan)
Windows和Linux动态库比较 Description: 摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库 可以有效的减少程序大小,节 ...
- bazel 链接第三方动态库_C/C++编程知识:Linux 动态库相关知识整理
动态库和静态库在C/C++开发中很常见,相比静态库直接被编译到可执行程序,动态库运行时加载使得可执行程序的体积更小,更新动态库可以不用重新编译可执行程序等诸多好处.作者是一个Linux后台开发,这些知 ...
- Linux动态库的动态加载与静态加载以及加载依赖了其他动态库的动态库
Linux动态库加载 在Linux下,动态库格式一般为libxxx.so或者libxxx.so.3这种格式. 通常我们在网上下载下来源码包,编译之后会是libxxx.so软连接libxxx.so.1链 ...
- linux代码动态分析软件,举例分析Linux动态库和静态库
函数库分为静态库和动态库两种.创建Linux静态库和Linux动态库和使用它们在这里将以举例的形式详述一下.静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库.动态库在程序编译时并不 ...
- 举例分析Linux动态库和静态库
转自:http://www.xxlinux.com/newxxlinux/development/gui/2012-01-05/499.html 函数库分为静态库和动态库两种.创建Linux静态库和L ...
最新文章
- python3 统计文件夹下文件(含文件夹)的个数
- Linux虚拟内存映射分析以及CMA测试 - 以SSD202为例
- 反思快乐:融入 真实 不回忆 聪明应对
- RHEL4-VNC服务配置
- 赋值给集合_ArrayList集合源码
- iPad上浏览超大图像,kakadu和Jpeg2000在iOS上的例程
- 传输层协议(8):滑动窗口(2)
- select2多选设置select多选,select2取值和赋值
- excel使用教程_有哪些超好用、高质量的Excel学习网站?
- centOS7搭建DNS服务器配置详解
- 做好加密手机 任重而道远
- 高数_第3章重积分_三重积分之2__先一后二和先二后一
- 推荐一个220V控制12V的电路板继电器-220v降压控制继电器
- Golang学习(十五) 数组排序和二分查找
- 解决 Error: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试。(酷狗音乐占用8000端口)
- TransferWise 转账到支付宝教程
- gensim numpy spicy等词云图制作库的安装方法(着重后期)
- Java学习笔记Day06 工具类及常用算法
- 《庄子·外篇·田子方第二十一》
- 色氨酸代谢与肠内外健康稳态