是否有 C++ API Linux 系统调用告诉您您的可执行文件链接了哪些共享库?

Is there a C++ API Linux System call that tells you which shared libraries your executable has linked?

我想知道是否有人知道产生类似于 ldd 命令的输出的 C++ 系统调用。我正在尝试获取我是 运行 的可执行文件已链接的所有共享库的列表(就像 ldd,但是 C++ API)。我的最终目标是获取我的程序链接的所有共享库的绝对路径。

您可以使用 dl_iterate_phdr:

#define _GNU_SOURCE
#include <link.h>
#include <stdlib.h>
#include <stdio.h>

static int callback(struct dl_phdr_info *info, size_t size, void *data) {
  printf("name=%s (%d segments)\n", info->dlpi_name, info->dlpi_phnum);
  return 0;
}

int main() {
  dl_iterate_phdr(callback, NULL);
  return 0;
}

该程序将产生以下输出:

name= (9 segments)
name= (4 segments)
name=/lib64/libdl.so.2 (7 segments)
name=/lib64/libc.so.6 (10 segments)
name=/lib64/ld-linux-x86-64.so.2 (7 segments)