我想知道是否有人知道一个c++系统调用产生类似于ldd命令的输出。我试图得到我正在运行的可执行文件链接的所有共享库的列表(就像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)