我想知道在 Linux 上执行 C/C++ 程序时加载了哪些动态库。
例如,
int main()
{
...
list = GetAllSharedLibraryFilePaths();
}
列表应包含:libm.so.6、librt.so.1、... 或者路径:/lib/x86_64-linux-gnu/libm.so.6,/lib/x86_64-linux-gnu/librt.so.1 ...
是否有返回所有共享库文件路径的 API?
我知道 ldd
、readelf
可以做到这一点,但我需要在加载共享库的可执行文件中使用 C/C++ 编程来做到这一点。
谢谢。
最佳答案
您可以使用非标准 dl_iterate_phdr(3)
函数遍历加载的共享对象列表。
#define _GNU_SOURCE
#include <link.h>
#include <stdio.h>
int print(struct dl_phdr_info *info, size_t size, void *data) {
printf("%s\n", info->dlpi_name);
return 0;
}
int main() {
dl_iterate_phdr(print, NULL);
return 0;
}
$ gcc test.c -o test
$ ./test
linux-vdso.so.1
/lib/x86_64-linux-gnu/libc.so.6
/lib64/ld-linux-x86-64.so.2
关于c++ - 列出在 Linux 上使用 C/C++ 执行的程序中的共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59258867/