linux / gcc:在C / C ++程序中的lddfunction

有没有一种简单而有效的方法来知道给定的dynamic链接的ELF是否缺less一个所需的.so文件来运行,所有这一切都来自C / C ++程序的内部?

我需要一个function与ldd相似的程序,而不需要执行ELF来查找系统中的(met / unmet)依赖关系。 也许通过一些库问ld-linux.so实用程序? (我是一个新手在这个部分的Linux =)

注意:读取ldd的源代码对我的意图不是很有帮助:看起来ldd实际上正在分叉另一个进程并执行程序。

如果不知道某个程序没有执行它的依赖性,那么有没有办法,至less可以在我的程序中快速列出这个ELF所需的.so文件?

在此先感谢=)

Solutions Collecting From Web of "linux / gcc:在C / C ++程序中的lddfunction"

根据ld.so(8) ,将环境变量LD_TRACE_LOADED_OBJECTS设置为非空字符串将会给出类似ldd的结果(而不是正常执行二进制或库)。

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

你有没有尝试过dlopen功能? 你可以使用它来加载一个动态库(或者,你的情况,如果一个库可以加载Cckck)。

有一个需要库的列表比较困难,请看readelf源码上的handle_dynamic函数