是否有 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)
我想知道是否有人知道产生类似于 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)