Linux 下dlopen的使用
一、函数说明
dlopen()
功能:打开一个动态链接库
包含头文件:
#include <dlfcn.h>
函数定义:
void *dlopen(const char *pathname,int mode);
二、函数描述:
dlopen()函数以指定模式打开指定的动态连接库文件,并返回一个句柄给调用进程。使用dlclose()来卸载打开的库。
mode是打开方式,其值有多个,不同操作系统上实现的功能有所不同,在linux下,按功能可分为三类:
1、解析方式
RTLD_LAZY:在dlopen返回前,对于动态库中的未定义的符号不执行解析(只对函数引用有效,对于变量引用总是立即解析)。
RTLD_NOW: 需要在dlopen返回前,解析出所有未定义符号,如果解析不出来,在dlopen会返回NULL,错误为:: undefined symbol: xxxx.......
2、作用范围,可与解析方式通过“|”组合使用。
RTLD_GLOBAL:动态库中定义的符号可被其后打开的其它库重定位。
RTLD_LOCAL: 与RTLD_GLOBAL作用相反,动态库中定义的符号不能被其后打开的其它库重定位。如果没有指明是RTLD_GLOBAL还是RTLD_LOCAL,则缺省为RTLD_LOCAL。
3、作用方式
RTLD_NODELETE: 在dlclose()期间不卸载库,并且在以后使用dlopen()重新加载库时不初始化库中的静态变量。这个flag不是POSIX-2001标准。
RTLD_NOLOAD: 不加载库。可用于测试库是否已加载(dlopen()返回NULL说明未加载,否则说明已加载),也可用于改变已加载库的flag,如:先前加载库的flag为RTLD_LOCAL,用dlopen(RTLD_NOLOAD|RTLD_GLOBAL)后flag将变成RTLD_GLOBAL。这个flag不是POSIX-2001标准。
RTLD_DEEPBIND:在搜索全局符号前先搜索库内的符号,避免同名符号的冲突。这个flag不是POSIX-2001标准。
返回值:
打开错误返回NULL
成功,返回库引用
编译时候要加入 -ldl (指定dl库)
例如
gcc test.c -o test -ldl
Linux 下dlopen的使用相关推荐
- linux dlopen 内存,Linux下加载库的有关问题(dlopenm, dlsym)
Linux下加载库的问题(dlopenm, dlsym) 如题, 程序中发现load库成功,但是加载函数的时候报错: undefined symbol functionname 是很简单的一个东西,因 ...
- linux 下动态链接库的创建与使用——dlopen,dlsym
一.引言 通常情况下,对函数库的链接是放在编译时期(compile time)完成的.所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件(exec ...
- linux下C++ 插件(plugin)实现技术
2019独角兽企业重金招聘Python工程师标准>>> linux下C++ 插件(plugin)实现技术 作者:掌门狗 时间:2008-12-01 20:21 分类:默认分类 标签: ...
- linux下的c库函数大全
linux下的c库函数大全,虽然没有函数描述,但是最起码可以知道分类,就可以去 man 了 Linux C函数库参考手册 第1章字符测试函数 isalnum(测试字符是否为英文字母或数字) isalp ...
- Linux下的静态链接库和动态链接库编程
Linux下的静态链接库和动态链接库编程 参考: Linux下的静态链接库和动态链接库编程 - Histring - 博客园 Mac下静态库和动态库的创建和使用_C/C++_vincent2610的专 ...
- Linux下的静态库、动态库和动态加载库
from: http://www.techug.com/linux-static-lib-dynamic-lib 库的存在极大的提高了C/C++程序的复用性,但是库对于初学者来说有些难以驾驭,本文从L ...
- java qt jni_java JNI 实现原理 (二) Linux 下如何 load JNILibrary
在博客java JNI (一) 虚拟机中classloader的JNILibrary 中讨论了java中的Library 是由classloader 来load的,那我们来看看 classloader ...
- Linux下Nginx编译安装过程详解
Linux下Nginx编译安装过程详解 一.Nginx介绍 二.Nginx源码下载 1.打开Nginx官网 2.下载官网的源码包 三.Nginx源码安装 1.解压源码包 2.安装开发包组及环境 3.编 ...
- 《LINUX下动态链接库的创建与应用》
大家都知道,在windows系统中有很多的动态链接库(以.dll为后缀的文档,dll即dynamic link library).这种动态链接库,和静态函数库不同,他里面的函数并不是执行程式本身的一部 ...
最新文章
- “打脸”世界杯:AI界没有预测比赛的章鱼保罗
- MetaHuman效果炸了!但如果只想到元宇宙,那格局有点小了
- 零基础学python爬虫-我是如何零基础开始能写Python爬虫的
- legend3---lavarel安装debugbar工具条
- [转] Web前端优化之 内容篇
- jQuery 发送 AJAX 请求
- 清理mysql的sleep链接_Mysql Sleep 链接过多导致 CPU 占用过高的问题
- sqllyog可以连接oracle_03-SQLServer中链接服务器用法--连接Oracle
- 智能音箱,你在窃听我吗?
- 算法习题---线性表之数组实现循环移动
- Excel 曝Power Query安全漏洞
- 《中國姓氏大全》【带拼音】
- WordPress获取当前网站域名
- 当当卓越京东商城货物配送流程揭秘
- 一个案例入门tableau——NBA球队数据可视化实战解析
- WORD/OFFICE排版时插入脚注和分栏冲突的解决方法
- netbeans使用教程_IDE:5个最喜欢的NetBeans功能
- Photoshop —— 白色(或任意颜色)或黑色物体修改成任意色彩
- 【WZOI】2019愚人节比赛题目分析
- 在线画图工具【高仿rose】方便地画工作流
热门文章
- 根据ip地址查询地址信息
- 心情随笔--2005年1月16日
- unity3D之UI
- php带旋转动画刷新页面,CSS_CSS实现弹簧效果的旋转加载动画,先看看效果,像是弹簧在伸缩 - phpStudy...
- RapidJSON入门:手把手教入门实例介绍
- 解决Docker容器无法停止删除的问题
- [leetcode]排列组合子集(python)
- 用 Python 替代Excel 表格,轻而易举实现办公自动化
- git revert 理解
- Predicted boxes or scores contain Inf/NaN. Training has diverged