有没有办法检查Linux上的当前rpath?

我知道有可能使用'readelf -d | grep RPATH'来检查shell中给定的二进制文件,但有可能在一个进程中做到这一点?

像(我完全组成系统调用)的东西:

/* get a copy of current rpath into buffer */ sys_get_current_rpath(&buffer); 

我试图诊断一些嫌疑人在我们的代码库链接问题,并希望如果可能的话这样检查RPATH(我宁愿不必产生一个外部脚本)。

 #include <stdio.h> #include <elf.h> #include <link.h> int main() { const ElfW(Dyn) *dyn = _DYNAMIC; const ElfW(Dyn) *rpath = NULL; const char *strtab = NULL; for (; dyn->d_tag != DT_NULL; ++dyn) { if (dyn->d_tag == DT_RPATH) { rpath = dyn; } else if (dyn->d_tag == DT_STRTAB) { strtab = (const char *)dyn->d_un.d_val; } } if (strtab != NULL && rpath != NULL) { printf("RPATH: %s\n", strtab + rpath->d_un.d_val); } return 0; } 

为了logging,这里有几个命令将显示rpath头。

 objdump -x binary-or-library |grep RPATH 

也许更好的方法是:

 readelf -d binary-or-library |head -20 

第二个命令还列出了rpath之后的其他库的直接依赖关系。

也许你可以使用github.com/NixOS/patchelf的代码,但AFAIK它不是一个图书馆的ATM。