学习动态链接dlopen , dlsym, dlclose

 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

猜你喜欢

转载自www.cnblogs.com/lc-bk/p/13388130.html