有一个简单而有效的方式知道一个给定的动态链接的ELF
缺少一个.so需要它来运行,所有从C / C ++程序的内容?
我需要有点类似功能的程序ldd
,没有尝试执行的ELF
找出在系统中(MET /未满足)的依赖。 也许通过询问一些库ld-linux.so效用? (我在Linux的这部分是一个新手=)
注:在阅读源代码ldd
是不是我的意图非常有帮助的:似乎ldd
其实分叉另一个进程,并执行程序。
如果这是不可能知道一个程序有不能满足的依赖但不执行,是有一些方法来,至少,很快列出该要求的.so的ELF
所有从我的计划之内?
由于事先=)
按照ld.so(8) ,所述环境变量设置LD_TRACE_LOADED_OBJECTS
到非空字符串会给ldd
(而不是执行二进制或库通常)样的结果。
setenv("LD_TRACE_LOADED_OBJECTS", "1", 1);
FILE *ldd = popen("/lib/libz.so");
你有没有试过dlopen
功能? 您可以使用此加载动态库(或者,你的情况下,如果ckeck库可以加载)。
有需要的库列表是比较困难的,看看到handle_dynamic
功能上readelf源
有关使用ptrace的()来跟踪所有的open()什么叫找到所有什么程序取决于(但是,输出包含的文件,不仅库)。或者也许通过文件名前缀过滤输出“/ lib目录”帮助。