Учитывая, что вы не знаете всего о системе, в которой будет работать ваш сценарий, и вам будет нелегко ее исправить, вам следует сохранить ее низкотехнологичной и простой в использовании.
Напишите переносимый сценарий sh, который перечисляет ПУТЬ
. Это касается установки без пакета, а также установки пакета, если установка без пакета находится в объявленном месте. (Если вы не можете доверять администраторам, которые сделали установки, которые вы хотите обнаруживать, вам лучше установить свои собственные.)
#!/bin/sh
set -f; IFS=:
set -- $PATH
set +f; unset IFS
for dir; do
if [ -x "$dir/python" ]; then printf %s "$dir/python is "; "$dir/python -V; fi
ls -l "$dir/python"* 2>/dev/null
if [ -x "$dir/python" ]; then printf %s "$dir/g++ is "; "$dir/g++ --version | head -n 1; fi
ls -l "$dir/g++"* 2>/dev/null
done
Вывод этого сценария является всего лишь примером, вы можете упростить его анализ .
Вас может заинтересовать удаление путей к библиотекам, если данная общая библиотека имеет встроенные пути через функцию rpath . Они добавляются во время создания библиотеки компоновщиком.
Вы можете удалить (или изменить) эти пути с помощью chrpath
, например,
chrpath -d mylibraryfile.so
Удаление имен путей из переменной LD_LIBRARY_PATH
также может представлять интерес; вы можете сделать это путем подстановки строк и повторного экспорта переменной. Однако, похоже, вопрос не в этом. Нет переменной, которая отменяет LD_LIBRARY_PATH
.
Для , где видны зависимости библиотек, упоминание /etc/ld.so.conf.d/
создает впечатление, что платформа - это только Linux. Вы можете использовать ldd
для вывода списка зависимостей. Помимо OSX, все BSD также поддерживают ldd
. Вот один из сценариев, которые я использую для этой цели:
#!/bin/sh
# $Id: ldd-path,v 1.1 2007/07/09 19:30:28 tom Exp $
# Edit the output of ldd for the given parameters, yielding only the
# absolute pathnames.
ldd $* | sed \
-e 's/([^)]*)//g' \
-e 's/^.*=>//' \
-e 's/[ ][ ]*//g' \
-e '/^$/d'
Но (обращаясь к комментарию), не существует переносимого механизма для указания загрузчику игнорировать существующий путь. В документации GNU ld дается сводка того, что требуется, и порядок в описании опции -rpath
. Следующие элементы завершают список:
- Каталоги по умолчанию, обычно
/ lib
и/ usr / lib
.- Для встроенного компоновщика в системе ELF, если файл
/etc/ld.so.conf
существует, список каталогов, найденных в этом файле.
Дополнительная литература