的Linux / GCC:从C / C ++程序内部LDD功能(linux/gcc: ldd fun

2019-07-20 22:07发布

有一个简单而有效的方式知道一个给定的动态链接的ELF缺少一个.so需要它来运行,所有从C / C ++程序内容?

我需要有点类似功能的程序ldd ,没有尝试执行的ELF找出在系统中(MET /未满足)的依赖。 也许通过询问一些库ld-linux.so效用? (我在Linux的这部分是一个新手=)

注:在阅读源代码ldd是不是我的意图非常有帮助的:似乎ldd其实分叉另一个进程,并执行程序。

如果这是不可能知道一个程序有不能满足的依赖但不执行,是有一些方法来,至少,很快列出该要求的.so的ELF所有从我的计划之内?

由于事先=)

Answer 1:

按照ld.so(8) ,所述环境变量设置LD_TRACE_LOADED_OBJECTS到非空字符串会给ldd (而不是执行二进制或库通常)样的结果。

setenv("LD_TRACE_LOADED_OBJECTS", "1", 1);
FILE *ldd = popen("/lib/libz.so");


Answer 2:

你有没有试过dlopen功能? 您可以使用此加载动态库(或者,你的情况下,如果ckeck库可以加载)。

有需要的库列表是比较困难的,看看到handle_dynamic功能上readelf源



Answer 3:

有关使用ptrace的()来跟踪所有的open()什么叫找到所有什么程序取决于(但是,输出包含的文件,不仅库)。或者也许通过文件名前缀过滤输出“/ lib目录”帮助。



文章来源: linux/gcc: ldd functionality from inside a C/C++ program