Linux下如何获取共享库文件名列表?

eph*_*ith 6 linux libraries

是否有内置的 GNU Linux 来获取共享库的文件名列表?我考虑过解析ldconfig -p. 但是,我不确定从系统到系统的输出的一致性。

我已经知道我可以使用,find但鉴于链接器/加载器具有库和位置的缓存,以某种方式使用它似乎更有效。此外,链接器/加载器搜索的路径是我唯一关心的路径——即由ldconfig.

lyn*_*ynx 8

如果您想全部捕获它们,则别无选择,只能进行完整的文件系统遍历。ldconfig只知道标准路径中的库和它配置为查找的额外路径(通常在 中定义/etc/ld.so.conf*)。可以找到其他库的常见可疑位置是$HOME/opt,尽管没有限制,尤其是当人们自己构建应用程序时。

如果您不信任 的输出ldconfig -p,则可以直接解析其缓存。它是二进制的,但使用strings会删除所有垃圾(5 所以 /lib/ 匹配):

strings -n5 /etc/ld.so.cache
Run Code Online (Sandbox Code Playgroud)

在我的系统上,它们都给出了相同的结果,我用这个快速验证了它:

a=$(ldconfig -p | awk -F'> ' '{print $2}' | sort); # get them to the same format
b=$(strings -n5 /etc/ld.so.cache | sort -u); 
echo -e "$a\n$b\n$b" | sort | uniq -u
Run Code Online (Sandbox Code Playgroud)

其中检查ldconfig -p列表中的任何库是否未在缓存中提及。什么都没有返回。