dlopen运行时加载库时可以使用相对路径和绝对路径,相对路径是相对于当前工作目录,如何让so中加载其它so文件时使用相对于so的路径?(这么做是因为so文件路径和可执行程序的路径关系不明确,可以使用path环境变量来改变),这时候可以用在so中使用get_current_so_dir来获取so的路径,原理是用dladdr查找get_current_so_dir这个符号,DL_info中包含了路径信息
void get_current_so_dir(char *path, int len)
{
Dl_info dl_info;
if (dladdr((void*)get_current_so_dir, &dl_info) > 0)
{
strncpy(path, dl_info.dli_fname, len);
for (int i=strnlen(path, len)-1; i>=0; i--)
{
if (path[i] == '/')
{
path[i] = 0;
break;
}
}
}
else
{
printf("get_current_so_dir failed\n");
}
}