linux动态加载动态库所使用的到的两个函数是
dlopen() 和 dlsym()
需要包含的头文件:
#include<dlfcn.h>
例子如下:
EPDKcreate_parser create_parser;
handle->dl_handle = dlopen("libdemux_rmvb.so", RTLD_NOW);
if(handle->dl_handle == NULL) {
log("open libdemux_rmvb.so failed");
return CDX_ERROR;
}
create_parser = (EPDKcreate_parser)dlsym(handle->dl_handle, "CreateRmvbParser");
epdk_dmx = create_parser();
EPDKcreate_parser 是一个函数指针;
dlopen()函数将动态库加载到内存中。此例中,使用该函数加载了 libdemux_rmvb.so
dlsym()函数查找动态库中的symbol。此例中,使用该函数找到一个CreateRmvbParser的symbol,实际上是一个函数。
使用函数指针 create_parser 指向 动态库中的CreateRmvbParser函数,并调用该函数。