首页 > 其他 > 详细

学习动态链接dlopen , dlsym, dlclose

时间:2020-07-28 01:25:48      阅读:108      评论:0      收藏:0      [点我收藏+]

 

 1 , 前言

   之前在鹅厂面试过程中,与面试官聊到操作系统方面 ,让我谈谈一些理解 ,面试官提到dlopen 脑子一片空白,平时这些东西真的很少接触,所以在专注于一点时,还是要多了解一些,部分要精! 共勉

 

2,什么是dlopen ? dlsym ? dlclose ?

  其实就是Linux提供的加载和处理动态链接库的系统调用,为了使程序更加方便扩展。

 

在Linux上 在#include<dlfcn.h>头文件下 

#include <dlfcn.h>

void *dlopen(const char *filename, int flag);

char *dlerror(void);

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

int dlclose(void *handle);

 简答介绍一下这几个函数 

  • dlopne 以指定模式打开指定动态库链接文件,返回一个可操作句柄
  • dlsym 通过句柄和连接符名称获取函数名或者变量名
  • dlerror 返回出现的错误
  • dlclose 通过句柄卸载加载的动态库 

在dlopen 函数的参数 flag 分为 : 1 RTLD_LAZY 暂缓决定,等有需要时再解出符号.   2 RTLD_NOW 立即决定,返回前解除所有未决定的符号。

  • RTLD_LAZY:在dlopen返回前,对于动态库中的未定义的符号不执行解析(只对函数引用有效,对于变量引用总是立即解析)
  • RTLD_NOW:需要在dlopen返回前,解析出所有未定义符号,如果解析不出来,在dlopen会返回NULL,错误为:: undefined symbol:x x x x

学习动态链接dlopen , dlsym, dlclose

原文:https://www.cnblogs.com/lc-bk/p/13388130.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!