一、函数说明

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的使用相关推荐

  1. linux dlopen 内存,Linux下加载库的有关问题(dlopenm, dlsym)

    Linux下加载库的问题(dlopenm, dlsym) 如题, 程序中发现load库成功,但是加载函数的时候报错: undefined symbol functionname 是很简单的一个东西,因 ...

  2. linux 下动态链接库的创建与使用——dlopen,dlsym

     一.引言 通常情况下,对函数库的链接是放在编译时期(compile time)完成的.所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件(exec ...

  3. linux下C++ 插件(plugin)实现技术

    2019独角兽企业重金招聘Python工程师标准>>> linux下C++ 插件(plugin)实现技术 作者:掌门狗 时间:2008-12-01 20:21 分类:默认分类 标签: ...

  4. linux下的c库函数大全

    linux下的c库函数大全,虽然没有函数描述,但是最起码可以知道分类,就可以去 man 了 Linux C函数库参考手册 第1章字符测试函数 isalnum(测试字符是否为英文字母或数字) isalp ...

  5. Linux下的静态链接库和动态链接库编程

    Linux下的静态链接库和动态链接库编程 参考: Linux下的静态链接库和动态链接库编程 - Histring - 博客园 Mac下静态库和动态库的创建和使用_C/C++_vincent2610的专 ...

  6. Linux下的静态库、动态库和动态加载库

    from: http://www.techug.com/linux-static-lib-dynamic-lib 库的存在极大的提高了C/C++程序的复用性,但是库对于初学者来说有些难以驾驭,本文从L ...

  7. java qt jni_java JNI 实现原理 (二) Linux 下如何 load JNILibrary

    在博客java JNI (一) 虚拟机中classloader的JNILibrary 中讨论了java中的Library 是由classloader 来load的,那我们来看看 classloader ...

  8. Linux下Nginx编译安装过程详解

    Linux下Nginx编译安装过程详解 一.Nginx介绍 二.Nginx源码下载 1.打开Nginx官网 2.下载官网的源码包 三.Nginx源码安装 1.解压源码包 2.安装开发包组及环境 3.编 ...

  9. 《LINUX下动态链接库的创建与应用》

    大家都知道,在windows系统中有很多的动态链接库(以.dll为后缀的文档,dll即dynamic link library).这种动态链接库,和静态函数库不同,他里面的函数并不是执行程式本身的一部 ...

最新文章

  1. “打脸”世界杯:AI界没有预测比赛的章鱼保罗
  2. MetaHuman效果炸了!但如果只想到元宇宙,那格局有点小了
  3. 零基础学python爬虫-我是如何零基础开始能写Python爬虫的
  4. legend3---lavarel安装debugbar工具条
  5. [转] Web前端优化之 内容篇
  6. jQuery 发送 AJAX 请求
  7. 清理mysql的sleep链接_Mysql Sleep 链接过多导致 CPU 占用过高的问题
  8. sqllyog可以连接oracle_03-SQLServer中链接服务器用法--连接Oracle
  9. 智能音箱,你在窃听我吗?
  10. 算法习题---线性表之数组实现循环移动
  11. Excel 曝Power Query安全漏洞
  12. 《中國姓氏大全》【带拼音】
  13. WordPress获取当前网站域名
  14. 当当卓越京东商城货物配送流程揭秘
  15. 一个案例入门tableau——NBA球队数据可视化实战解析
  16. WORD/OFFICE排版时插入脚注和分栏冲突的解决方法
  17. netbeans使用教程_IDE:5个最喜欢的NetBeans功能
  18. Photoshop —— 白色(或任意颜色)或黑色物体修改成任意色彩
  19. 【WZOI】2019愚人节比赛题目分析
  20. 在线画图工具【高仿rose】方便地画工作流

热门文章

  1. 根据ip地址查询地址信息
  2. 心情随笔--2005年1月16日
  3. unity3D之UI
  4. php带旋转动画刷新页面,CSS_CSS实现弹簧效果的旋转加载动画,先看看效果,像是弹簧在伸缩 - phpStudy...
  5. RapidJSON入门:手把手教入门实例介绍
  6. 解决Docker容器无法停止删除的问题
  7. [leetcode]排列组合子集(python)
  8. 用 Python 替代Excel 表格,轻而易举实现办公自动化
  9. git revert 理解
  10. Predicted boxes or scores contain Inf/NaN. Training has diverged