dlopen
###
dlopen()是一个计算机函数,功能是以指定模式打开指定的动态链接库文件,并返回一个句柄给dlsym()的调用进程。使用dlclose()来卸载打开的库。
头文件
#include <dlfcn.h>
函数定义
void * dlopen( const char * pathname, int mode);
返回值
- 错误,返回NULL
- 成功,返回库引用
编译
编译时候要加入 -ldl (指定dl库)。例如:
gcc test.c -o test -ldl
库路径
- 绝对路径
直接在代码中dlopen时,写入库的绝对路径。例如:
handle = dlopen ("/home/saylst/libm.so", RTLD_LAZY);
上面代码表明,libm.so就在/home/saylst同目录下。
- 不写路径,例如:
handle = dlopen ("libm.so", RTLD_LAZY);
上面代码只写了库的名称,那么程序怎么知道去哪里找对应的.so文件呢? 是按照这样的顺序:
-
- 环境变量LD_LIBRARY_PATH指明的路径。
-
- /etc/ld.so.cache中的函数库列表。
-
- /lib目录,然后/usr/lib。不过一些很老的a.out的loader则是采用相反的次序,也就是先查/usr/lib,然后是/lib。
-
而通常我们都会将库文件放在LD_LIBRARY_PATH对应的目录下。