共享库的“哪个”等价物


9

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

Answers:


5

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

ldd /path/to/executable

这将说明默认搜索路径上的库以及此可执行文件的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}'

5

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

ldconfig -p|grep "yourlibrary"

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

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

这还将输出未安装的rpm,但它们是活动安装源的一部分。


3

如果您正在寻找一个实用工具,它的工作方式类似于gcc-lLIBNAMEflag,它查找一个名为的文件,libLIBNAME.so那么您可能会使用一个小脚本来执行以下操作:

#!/bin/sh
ldpath="${LD_LIBRARY_PATH:-$(</etc/ld.so.conf)}"
notfound=1
for libdir in ${ldpath//:/ }; do
        (test -f "$libdir/lib${1}.so" && echo "$_") && notfound=0
done
[ "$notfound" -eq 0 ]

1
感谢您的脚本,但是我真的很想知道是否有一个“标准”实用程序。
rahmu 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.