Чи нормально, що змінна 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змінної?

Відповіді:


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 як писати спільні бібліотеки .


Це була моя помилка, хоча я LD_LIBRARY_PATH - продукт запуску ldconfig. Тим часом це вхід ldconfig разом з файлами в /etc/ld.so.conf.
calavera.info

1
Я відчуваю, що ldconfigне використовуй $LD_LIBRARY_PATH(який використовується лише в той ld-linux.soчас)
Базиле Старинкевич,

3
@ calavera.info - це не те. Динамічний лінкер використовує LD_LIBRARY_PATH разом з результатами роботи ldconfigпід час виконання. ldconfigні використання, ні зміни LD_LIBRARY_PATH.
варення

Тепер я можу бачити, що я його повністю переплутав, ймовірно, витрачаючи занадто багато часу на Java, де "classpath" є віртуальною єдиною конфігурацією динамічного зв'язку. Зараз, здається, все зрозуміло, велике спасибі.
calavera.info
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.