查找 ldd 不会列出的共享库?

查找 ldd 不会列出的共享库?

我有一个脚本可以运行并拉入所需的共享库(另一个脚本将报告未使用的库),ldd但使用某些东西(例如不显示的libnss_*项目部分) 。glibc我怎样才能找到这些类型的依赖关系?

谢谢

答案1

简而言之:你不能。

加载库可以在程序初始化时使用硬编码的库名称来完成,这就是 ldd 检测到的。

然而,任何程序也可以在运行时从任何库加载符号,并且该库的名称也可以在运行时计算;最明显的用例是插件系统!

因此,如果没有在加载该库的用例中运行程序,您就无法知道这一点(例如,如果您有一个图像编辑器,它可能会决定加载一个用于加载 jpeg 文件的库,而不早于您实际尝试的时间)打开 jpeg 文件)。

由于了解运行时加载的所有库是不可能的问题,因此打包脚本(例如为 redhat/fedora 构建 rpm 包所需的 .spec 文件)需要打包人员手动指定那些无法自动检测的依赖项。

相关内容