1.概念
dlopen()指定模式打开指定的动态链接库文件,并返回一个句柄给dlsym()的调用进程,使用dlclose()来卸载打开的库。
通俗的讲就是读取库内函数来使用库里的函数。
2.流程
打开库:void* dlopen(const char* libfile,int flag);
取函数:void* dlsym(void* handler, const char* symbol);
运行函数:func
关闭库:int dlclose(void* handler);
3.实例
runlib.c
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
#define DLL_PATH "./libsd.so"
typedef int (*func)(int, int);
int main(){
void *dlhandler;
char *error;
func func = NULL;
dlhandler = dlopen(DLL_PATH,RTLD_LAZY);
if(dlhandler == NULL){
fprintf(stderr,"%s\n",dlerror());
exit(-1);
}
dlerror();
func = dlsym(dlhandler,"sumab");
printf("%d\n",func(1,2));
dlclose(dlhandler);
return 0;
}
编译:
gcc -rdynamic -o runlib runlib.c -ldl
运行:
[teanee@localhost runlib]$ ./runlib
3
成功调用sumab函数。