6

是否有一种简单有效的方法可以知道给定的动态链接ELF缺少运行所需的 .so 文件,所有这些都来自C/C++ 程序的内部?

我需要一个功能与 类似的程序ldd,而无需尝试执行ELF以找出系统中的(满足/未满足)依赖关系。也许通过某个库询问 ld-linux.so 实用程序?(我是这部分linux的新手=)

注意:阅读源代码ldd对我的意图没有多大帮助:似乎ldd实际上是在分叉另一个进程并执行程序。

如果在不执行程序的情况下无法知道程序具有未满足的依赖关系,是否有某种方法可以至少ELF从我的程序中快速列出所有这些所需的 .so 文件?

提前感谢=)

4

3 回答 3

8

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

setenv("LD_TRACE_LOADED_OBJECTS", "1", 1);
FILE *ldd = popen("/lib/libz.so");
于 2009-10-05T16:26:39.593 回答
1

你试过dlopen函数吗?您可以使用它来加载动态库(或者,对于您的情况,检查是否可以加载库)。

拥有所需库的列表更加困难,请查看handle_dynamicreadelf源代码

于 2009-10-05T15:10:42.727 回答
-1

如何使用 ptrace() 跟踪所有 open() 调用以查找程序所依赖的所有内容(但是,输出包括文件,而不仅仅是库)。或者通过文件名“/lib”中的前缀过滤输出会有所帮助.

于 2018-04-16T06:31:00.877 回答