我想以编程方式获取我的二进制文件在 Linux 和 Solaris 上链接的共享库列表。现在我使用 pmap (我不能ldd
在二进制文件上使用,因为它不包含 dlopen'd 库,我不能使用pldd
,因为它只是 Solaris):
std::ostringstream cmd;
cmd << "/usr/bin/pmap " << getpid() << " | awk '{ print $NF }' | grep '\\.so' | sort -u";
FILE* p = popen(cmd.str().c_str(), "r");
这有点骇人听闻,但它适用于 Solaris 和 Linux(pmap 输出略有不同,但所需的信息总是在最后一列)。有没有办法在不掏空的情况下获得相同的信息?这在两个平台上都有效吗?我假设/proc/$PID
文件之间的格式不同,但我不知道帮助解析这些文件的标题通常位于哪里(如果有一个共同的位置?)。