记录嵌入式项目中实际用到的动态库加载方法
步骤1:dlopen函数 以RTLD_LAZY | RTLD_GLOBAL方式打开动态库(指定路径下.so文件)
void * dlopen(char *fileName, int mode);将其加载到内存中,并返回动态库操作句柄
--fileName 动态库文件名(含路径)
--mode 加载模式,RTLD_LAZY 暂缓决定,等有需要时再解出符号, RTLD_NOW 立即决定,返回前解除所有未决定的符号
void *handle = null ;
handle = dlopen("/program/lib/123.so", RTLD_LAZY | RTLD_GLOBAL)
if(null == handle )
{
//动态库加载失败
}
步骤2:dlsym函数 从动态库中获取具体函数名或者变量名的指针(具体的函数名称)
void *dlsym(void *handle, char *fucName);返回获取的函数地址
--动态库操作句柄,dlopen函数的返回值
--fucName 函数名
void *funProc= null ;
funProc= dlsym(handle, "main_init")
if(null == funProc)
{
//获取函数名失败
}
步骤3:dlclose 取消加载动态库函数(具体的函数名称)
int dlclose(void *handle);返回值为操作结果
dlclose(handle)