Введение / Зачем это нужно
Переменная LD_LIBRARY_PATH сообщает динамическому линковщику, где искать разделяемые библиотеки (.so), помимо стандартных каталогов вроде /lib и /usr/lib. Это полезно, когда вы собираете или устанавливаете программы в нестандартные пути, тестируете новые версии библиотек или запускаете проприетарное ПО с «встроенными» зависимостями. После настройки приложения смогут находить нужные .so и запускаться без ошибок вроде «error while loading shared libraries».
Требования / Подготовка
Перед началом убедитесь, что у вас есть:
- Пользователь с правами на чтение каталогов с библиотеками и возможностью использовать
sudoдля системных изменений. - Установленные утилиты
ldconfig,lddи текстовый редактор (например,nanoилиvim). - Понимание того, куда физически расположены нужные
.so(обычно это/opt/.../lib,/usr/local/libили домашний каталог проекта).
Пошаговая инструкция
Шаг 1: Проверить текущие пути поиска
Посмотрите текущее значение переменной и системные конфигурации:
echo $LD_LIBRARY_PATH
cat /etc/ld.so.conf
ls /etc/ld.so.conf.d/
Это поможет избежать дублирования и понять, какие каталоги уже участвуют в поиске.
Шаг 2: Установить переменную временно
Для текущей сессии терминала добавьте путь и проверьте результат:
export LD_LIBRARY_PATH=/opt/myapp/lib:$LD_LIBRARY_PATH
ldd /opt/myapp/bin/myprogram
Команда ldd покажет, найдены ли зависимости. Экспорт в начале строки гарантирует, что новый путь будет первым при поиске.
Шаг 3: Сделать настройку постоянной для пользователя
Чтобы не вводить export при каждом входе, добавьте строку в профиль вашей оболочки. Для Bash:
echo 'export LD_LIBRARY_PATH=/opt/myapp/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
Если используете Zsh, аналогично добавьте в ~/.zshrc. Это сохранит настройку для ваших сессий и не затронет других пользователей.
Шаг 4: Настроить системные пути через ldconfig
Для глобального решения опишите каталог в конфигурации линковщика. Создайте файл в /etc/ld.so.conf.d/:
echo '/opt/myapp/lib' | sudo tee /etc/ld.so.conf.d/myapp.conf
sudo ldconfig
После этого все пользователи смогут запускать программы, зависящие от библиотек в этом каталоге, без необходимости экспортировать переменную. Приоритет всё равно определяется порядком в конфигурации и кэшем ldconfig.
Проверка результата
Убедитесь, что программа стартует и использует нужные библиотеки:
ldd /opt/myapp/bin/myprogram | grep mylib
LD_DEBUG=libs /opt/myapp/bin/myprogram 2>&1 | head -20
Отсутствие сообщений о «missing» и корректный вывод LD_DEBUG подтверждают, что линковщик находит все зависимости.
Возможные проблемы
- Переменная не сохраняется: убедитесь, что вы отредактировали правильный профиль и применили его через
source. - Программа всё равно не видит библиотеки: проверьте битность (x86_64 vs i386) и права доступа к
.so. - Конфликты версий: приоритет
LD_LIBRARY_PATHможет привести к загрузке несовместимой версии — в таких случаях лучше настроитьrpathпри сборке или использоватьldconfig. - Потеря производительности или безопасности: широкое использование переменной может замедлить запуск и создать риск подмены библиотек — ограничивайте её применение необходимыми сценариями.