【问题标题】:Is there a C++ API Linux System call that tells you which shared libraries your executable has linked?是否有 C++ API Linux 系统调用可以告诉您可执行文件链接了哪些共享库?
【发布时间】:2021-05-25 00:14:31
【问题描述】:

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

【问题讨论】:

  • 我没有这个问题的答案,但我想问为什么您正在寻找这样的解决方案?这可能是XY Problem 吗?你应该提供你需要这个的原因,因为问题本身可能有更好的解决方案,而不是你请求的特定 API
  • Linux 的/proc 可能在这里有用,您的程序可以在运行时对其进行检查。
  • @dave 不错,但不会处理 dlopens。

标签: c++ linux shared-libraries


【解决方案1】:

你可以使用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)

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 2017-02-24
    • 2015-09-05
    • 2021-06-16
    相关资源
    最近更新 更多