我有一个脚本可以运行并拉入所需的共享库(另一个脚本将报告未使用的库),ldd
但使用某些东西(例如不显示的libnss_*
项目部分) 。glibc
我怎样才能找到这些类型的依赖关系?
谢谢
答案1
简而言之:你不能。
加载库可以在程序初始化时使用硬编码的库名称来完成,这就是 ldd 检测到的。
然而,任何程序也可以在运行时从任何库加载符号,并且该库的名称也可以在运行时计算;最明显的用例是插件系统!
因此,如果没有在加载该库的用例中运行程序,您就无法知道这一点(例如,如果您有一个图像编辑器,它可能会决定加载一个用于加载 jpeg 文件的库,而不早于您实际尝试的时间)打开 jpeg 文件)。
由于了解运行时加载的所有库是不可能的问题,因此打包脚本(例如为 redhat/fedora 构建 rpm 包所需的 .spec 文件)需要打包人员手动指定那些无法自动检测的依赖项。