栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

一、Linux动态库的显式调用(dlfcn.h)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一、Linux动态库的显式调用(dlfcn.h)

1 概念 1.1 静态库

  一般扩展名为( .a 或 .lib ),这类函数库通常名为libxxx.a或xxx.lib。
  这类库在编译的时候会直接整合到目标程序中,所以利用静态函数库编译成的文件会比较大,这类函数库最大的优点就是编译成功的可执行文件可以独立运行,而不在需要向外部要求读取函数库的内容。

1.2 动态库

  动态函数库的扩展名一般为( .so 或 .dll ),这类函数库通常名为libxxx.so或xxx.dll
  动态库是程序设计常用的技术。采用动态库可以有效的减少程序大小、节省空间、提高效率。增加程序的可扩展性。便于模块化管理。在Windows和Linux操作系统中都有动态库的概念。Windows将其称为动态链接库(Dvnamic link Library. DLL),其文件扩展名.dll,Linux称其为共享库技术(Shared Library),相应的共享库文件扩展名为.so。
  动态函数库在编译的时候,在程序里只有一个“指向”的位置而已,也就是说当可执行文件需要使用到函数库的机制时,程序才会去读函数库来使用。

1.3 动态库链接

  动态库在程序运行的时候被动态链接。但是在具体使用动态库的时候却有两种不同的方式:隐式链接和显式链接。

1.3.1 隐式链接

  隐式链接在编译/链接阶段完成,由编译系统根据动态库的头文件和库文件进行编译和链接。从而确定待调用的函数原形和地址。

1.3.2 显式链接

  利用API函数实现加载和卸载共享库,获取带调用函数地址,获取错误信息等功能。

2 dlfcn.h
#include

void *dlopen(const char *pathname, int mode);


void *dlsym(void *handle, const char* symbol);


char *dlerror(void);


int dlclose(void *handle);

  有的代码可能用到了两个特殊的函数 __init和__fini。这两个函数用在装载和卸载某个动态库的时候。

void __init(void);
void __fini(void);
gcc编译的时候添加参数-ldl

参考1:dlopen函数详解
参考2:linux 动态库 显式调用 与 隐式调用

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/300378.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号