Это нормально, что переменная LD_LIBRARY_PATH отсутствует в среде?

15

По совпадению я обнаружил, что в моем Debian Jessie нет LD_LIBRARY_PATHпеременной (точнее, printenv | grep LDничего не показывает связанной с компоновщиком и echo "$LD_LIBRARY_PATH"ничего не показывает).

Это имеет место в эмуляторе терминала x ( который может очистить его из-за setgid ), а также в базовом терминале ( Ctrl+Alt+F1).

Я знаю, что это LD_LIBRARY_PATH может считаться плохим, поэтому Debian может как-то его заблокировать, но, с другой стороны, в нем есть несколько файлов, /etc/ld.so.conf.d/которые содержат некоторые каталоги, которые нужно добавить LD_LIBRARY_PATH. Ни один из моих файлов rc (который я знаю) не связывался LD_LIBRARY_PATHни с одним.

Почему я не вижу LD_LIBRARY_PATHпеременную?

calavera.info
источник

Ответы:

22

Да, это нормально, что у вас нет никаких явных LD_LIBRARY_PATH. Читайте также ldconfig (8) и ld-linux (8) и о rpath . Обратите внимание, что ldconfigобновления /etc/ld.so.cache, а не LD_LIBRARY_PATH. Иногда вы явно устанавливаете rpath исполняемого файла с -Wl,-rpath,каталогом, передаваемым gccво время ссылки.

Если вам нужно LD_LIBRARY_PATH(но, вероятно, не стоит), установите его самостоятельно (например, в ~/.bashrc).

Если вам нужны широкие системные настройки, вы могли бы , например , рассмотреть вопрос о включении /usr/local/lib/в /etc/ld.so.confи запустить ldconfigпосле установки каждой библиотеки там.

AFAIK $LD_LIBRARY_PATHиспользуется только динамическим компоновщиком ld-linux.sodlopen (3), который его использует) после execve (2) . Смотрите также ldd (1) .

Прочитайте Drepper's Как писать общие библиотеки для получения дополнительной информации.

Василий Старынкевич
источник
Это была моя ошибка, хотя я думаю, что LD_LIBRARY_PATH - это продукт бега ldconfig. Между тем это ввод ldconfig вместе с файлами в /etc/ld.so.conf.
calavera.info
1
У меня такое ощущение , что ldconfigне используют $LD_LIBRARY_PATH(который используется только на ld-linux.soвремя)
Basile Starynkevitch
3
@ calavera.info это ни то, ни другое. Динамический компоновщик использует LD_LIBRARY_PATH вместе с выводом ldconfigво время выполнения. ldconfigне использует и не меняет LD_LIBRARY_PATH.
Хоббс
Теперь я вижу, что у меня это полностью испорчено, возможно, я провел слишком много времени на Java, где «classpath» - фактически единственная конфигурация динамического связывания. Кажется, теперь все ясно, большое спасибо.
calavera.info