dlopen函数

C语言编程

Posted by Saylst on April 24, 2018

dlopen

###

dlopen()是一个计算机函数,功能是以指定模式打开指定的动态链接库文件,并返回一个句柄给dlsym()的调用进程。使用dlclose()来卸载打开的库。

头文件

#include <dlfcn.h>

函数定义

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

返回值

  • 错误,返回NULL
  • 成功,返回库引用

编译

编译时候要加入 -ldl (指定dl库)。例如:

gcc test.c -o test -ldl

库路径

  1. 绝对路径

直接在代码中dlopen时,写入库的绝对路径。例如:

handle = dlopen ("/home/saylst/libm.so", RTLD_LAZY);  

上面代码表明,libm.so就在/home/saylst同目录下。

  1. 不写路径,例如:
    handle = dlopen ("libm.so", RTLD_LAZY);  
    

    上面代码只写了库的名称,那么程序怎么知道去哪里找对应的.so文件呢? 是按照这样的顺序:

      1. 环境变量LD_LIBRARY_PATH指明的路径。
      1. /etc/ld.so.cache中的函数库列表。
      1. /lib目录,然后/usr/lib。不过一些很老的a.out的loader则是采用相反的次序,也就是先查/usr/lib,然后是/lib。

而通常我们都会将库文件放在LD_LIBRARY_PATH对应的目录下。