如何获取与给定dlopen的相对路径相对应的绝对库文件名?

Johannes Schaub-小伙子:

在我的程序中,我有如下代码

/* libname may be a relative path */
void loadLib(char const *libname) {
   void *handle = dlopen(libname);
   /* ... */
   dlclose(handle);
}

在中/* .. */,我需要读取内存映射文件/proc/self/maps,以找到libname要映射到的虚拟内存地址,还需要打开库以在其中找到某些部分。为此,我需要dlopen通过在各个位置(例如在ldconfig缓存文件中)进行搜索找到的绝对名称如何接收该文件名?


这就是我最终的结论(是的,这是C ++代码,尽管如此,C标记对于此问题还是有意义的,因为dlopen它与C ++和C一起使用,并且我的问题对这两个问题均适用,并且POSIX将其指定为C。)。

   boost::shared_ptr<void> dl;
   if(void *handle = dlopen(libfile, RTLD_LAZY)) {
      dl.reset(handle, &dlclose);
   } else {
      printdlerr();
      return -1;
   }

   /* update sofile to be an absolute file name */
   {
      struct link_map *map;
          dlinfo(dl.get(), RTLD_DI_LINKMAP, &map);
      if(!map) {
         return -1;
      }
      char *real = realpath(map->l_name, NULL);
      if(!real)
         return -1;
      sofile.reset(real, &free);
   }

libfile是相对/纯文件名。该映射将产生一个非普通文件名(即不是,foo.so但可能是./foo.so)。之后,我使用realpath了最终的绝对路径名。效果很好!

奥列格:

你可以用

... dlinfo(handle, RTLD_DI_LINKMAP, p)
p->l_name ...

其中p的类型为Link_map **

有关详细信息,请参见man dlinfo

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python Glob,OS,相对路径,使文件名成为列表

如何在Linux中以编程方式获取给定相对路径的绝对路径?

java.nio.file.WatchEvent仅提供相对路径。如何获取修改后的文件的绝对路径?

如何定义文件的相对路径?

jar清单中的绝对路径名和相对路径名

如何获取给定相对路径的绝对路径

从相对路径和/或文件名解析绝对路径

Java Nio相对路径的绝对路径

给定两个绝对路径,如何找到相对路径?

lcov绝对路径与相对路径

MSBuild:给定绝对路径,如何获取文件的相对路径?

删除或仅使用相对路径或文件名替换EAssertionFailed的绝对路径吗?

如何停止自动将所有文件的相对路径替换为绝对路径

如何使用相对路径提取href的绝对URL?

如何使用pathlib在Python中获取两个绝对路径之间的相对路径?

如何在Powershell脚本中解析相对或绝对文件名输入参数的绝对路径?

如何通过绝对或相对路径获得正确的路径?

如何在PowerShell中基于相对路径或绝对路径获取绝对路径?

脚本-绝对相对路径

从绝对URI获取EObject的相对路径

从绝对路径到相对路径

搜索带有扩展名的文件名并打印其相对路径

从相对路径获取绝对路径

给定文件名获取其绝对路径

根据绝对路径查找相对路径

从绝对基础到相对路径

获取 XML 文件相对路径的绝对路径

如何在 .jsx 文件中将绝对路径更改为相对路径。(Photoshop 扩展脚本)?

在相对路径中迭代多个文件名

TOP 榜单

热门标签

归档