共享库的“which”等价物

rah*_*hmu 16 c dynamic-linking

我正在寻找一个实用程序,它的行为方式与 相同which,但要在 $LD_LIBRARY_PATH 中定义的目录中查找共享库 (*.so)?

Nil*_*ils 7

如果您的库被正确缓存,您应该能够通过以下方式找到它:

ldconfig -p|grep "yourlibrary"
Run Code Online (Sandbox Code Playgroud)

如果您搜索发行版附带的库,您可以使用发行版方法在包中搜索文件。

  • zypper wp "*/library.so"(SLES 和 OpenSuSE)
  • yum 提供“*/library.so”(RedHat 及其克隆)

这还将输出未安装但属于活动安装源的 rpm。


Gil*_*il' 7

如果您有一个可执行文件并且您想查看它在哪里获取库,请运行

ldd /path/to/executable
Run Code Online (Sandbox Code Playgroud)

这将考虑默认搜索路径上的库以及此可执行文件的rpath 中的库(如果有)。

在 Linux 上,系统库的路径被缓存以提高效率。/sbin/ldconfig -p显示缓存的内容(它存储在 中/etc/ld.so.cache)。这是一个显示库位置的脚本:

#!/bin/sh
if [ -n "$LD_LIBRARY_PATH" ]; then
  set -f
  IFS=:
  for d in $LD_LIBRARY_PATH; do
    if [ -e "$d/$1" ]; then echo "$1"; fi
  done
fi
/sbin/ldconfig -p |
awk -v needle="$1" '$1 == needle {sub(/.* => /, ""); print}'
Run Code Online (Sandbox Code Playgroud)