阐述Linux动态库的显式调用

分类: Linux 2011-02-12 10:27 168人阅读 评论(0) 收藏 举报
linux测试nulllibrarypathgcc

十年的发展,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、编写测试文件

  1. //main.c 测试动态库显式调用的程序
  2. #include<dlfcn.h>  //用于动态库管理的系统头文件
  3. #include "myalib.h"//要把函数的头文件包含进来,否则编译时会报错
  4. int main(int argc,char* argv[])
  5. {
  6. //声明对应的函数的函数指针
  7. void (*pTest)();
  8. //加载动态库
  9. void *pdlHandle = dlopen("libtest.so", RTLD_LAZY);
  10. //错误处理
  11. if(pdlHandle == NULL ){
  12. printf("Failed load library/n");
  13. return -1;
  14. }
  15. char* pszErr = dlerror();
  16. if(pszErr != NULL)
  17. {
  18. printf("%s/n", pszErr);
  19. return -1;
  20. }
  21. //获取函数的地址
  22. pTest = dlsym(pdlHandle, "test");
  23. pszErr = dlerror();
  24. if(pszErr != NULL)
  25. {
  26. printf("%s/n", pszErr);
  27. dlclose(pdlHandle);
  28. return -1;
  29. }
  30. //实现函数调用
  31. (*pTest)();
  32. //程序结束时关闭动态库
  33. dlclose(pdlHandle);
  34. return 0;
  35. }

2、编译测试文件

使用-ldl选项指明生成的对象模块需要使用共享库

gcc -o main -ldl main.c

执行完后就生成了一个main文件

3、执行测试程序

执行 ./main

输出

test

说明成功。这就是Linux动态库的显式调用的介绍。

阐述Linux动态库的显式调用相关推荐

  1. VS2019 - 动态库的编写和调用

    VS2019 - 动态库的编写和调用 完善自己知识体系的一些内容: 用C++编写的DLL(动态链接库)中,导出类的接口封装方法总结 详解dll的封装,以及三种调用方法(将±×÷封装为例) 1 VS20 ...

  2. 【Linux】静态库与动态库的生成及调用

    一,库:一种可执行代码的二进制形式,可以被载入内存执行.其中库分为静态库.动态库 二,静态库和动态库的区别          1)Linux 下静态库:名字一般为 lib***.a利用静态函数库编译成 ...

  3. Linux 动态库的显示调用

    Linux 动态库的显示调用 分类: 动态库与静态库 2012-03-17 23:56 1710人阅读 评论(0) 收藏 举报 linuxnulllibrary测试web服务apache 10.动态库 ...

  4. 分析Windows和Linux动态库

    摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理.但不同操作系 ...

  5. Windows和Linux动态库比较 (Zhuan)

    Windows和Linux动态库比较 Description: 摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库 可以有效的减少程序大小,节 ...

  6. bazel 链接第三方动态库_C/C++编程知识:Linux 动态库相关知识整理

    动态库和静态库在C/C++开发中很常见,相比静态库直接被编译到可执行程序,动态库运行时加载使得可执行程序的体积更小,更新动态库可以不用重新编译可执行程序等诸多好处.作者是一个Linux后台开发,这些知 ...

  7. Linux动态库的动态加载与静态加载以及加载依赖了其他动态库的动态库

    Linux动态库加载 在Linux下,动态库格式一般为libxxx.so或者libxxx.so.3这种格式. 通常我们在网上下载下来源码包,编译之后会是libxxx.so软连接libxxx.so.1链 ...

  8. linux代码动态分析软件,举例分析Linux动态库和静态库

    函数库分为静态库和动态库两种.创建Linux静态库和Linux动态库和使用它们在这里将以举例的形式详述一下.静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库.动态库在程序编译时并不 ...

  9. 举例分析Linux动态库和静态库

    转自:http://www.xxlinux.com/newxxlinux/development/gui/2012-01-05/499.html 函数库分为静态库和动态库两种.创建Linux静态库和L ...

最新文章

  1. python3 统计文件夹下文件(含文件夹)的个数
  2. Linux虚拟内存映射分析以及CMA测试 - 以SSD202为例
  3. 反思快乐:融入 真实 不回忆 聪明应对
  4. RHEL4-VNC服务配置
  5. 赋值给集合_ArrayList集合源码
  6. iPad上浏览超大图像,kakadu和Jpeg2000在iOS上的例程
  7. 传输层协议(8):滑动窗口(2)
  8. select2多选设置select多选,select2取值和赋值
  9. excel使用教程_有哪些超好用、高质量的Excel学习网站?
  10. centOS7搭建DNS服务器配置详解
  11. 做好加密手机 任重而道远
  12. 高数_第3章重积分_三重积分之2__先一后二和先二后一
  13. 推荐一个220V控制12V的电路板继电器-220v降压控制继电器
  14. Golang学习(十五) 数组排序和二分查找
  15. 解决 Error: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试。(酷狗音乐占用8000端口)
  16. TransferWise 转账到支付宝教程
  17. gensim numpy spicy等词云图制作库的安装方法(着重后期)
  18. Java学习笔记Day06 工具类及常用算法
  19. 《庄子·外篇·田子方第二十一》
  20. 色氨酸代谢与肠内外健康稳态

热门文章

  1. 忽然觉得照着技术文档一个demo一个demo的写是一个十分好的学习方式
  2. Symfony 4.3 发布,带来搜索引擎自动保护
  3. express+mongodb+vue实现增删改查-全栈之路2.0
  4. JavaSE之ClassLoader
  5. 外媒炒作中国黑客入侵美保险公司 并无相关证据
  6. Hibernate学习(三)
  7. 大棚骨架搭建好 科学施肥增收增产
  8. Java剖析工具JProfiler入门使用教程:离线剖析和触发器
  9. 无缓冲channel的内存泄漏问题
  10. Java笔记(七)HashMap和HashSet