Я ищу утилиту, которая будет вести себя так же, как which
, но искать общие библиотеки (* .so) в каталогах, определенных в $ LD_LIBRARY_PATH?
источник
Я ищу утилиту, которая будет вести себя так же, как which
, но искать общие библиотеки (* .so) в каталогах, определенных в $ LD_LIBRARY_PATH?
Если у вас есть исполняемый файл, и вы хотите увидеть, где он собирает библиотеки, запустите
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}'
Если ваши библиотеки правильно кэшированы, вы сможете найти их через:
ldconfig -p|grep "yourlibrary"
Если вы ищете библиотеку, которая входит в ваш дистрибутив, вы можете использовать средства распространения для поиска файлов в пакетах.
Это также выведет rpms, которые не установлены, но являются частью ваших активных источников установки.
Если вы ищете утилиту , которая будет работать как gcc
«S -lLIBNAME
флаг, который ищет файл с именем , 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 ]