Linux

ldconfig в Linux: полное руководство по управлению библиотеками

Этот гайд подробно объясняет, как управлять кэшем динамических библиотек с помощью ldconfig. Вы научитесь добавлять пути, обновлять кэш и диагностировать проблемы с загрузкой библиотек.

Обновлено 16 февраля 2026 г.
10-15 мин
Низкая
FixPedia Team
Применимо к:Ubuntu 20.04+Debian 10+CentOS 7+Fedora 35+

ldconfig в Linux: полное руководство по управлению библиотеками

Введение / Зачем это нужно

В Linux динамические библиотеки (файлы .so) — это ключевой механизм для экономии памяти и упрощения обновлений программ. Однако система должна как-то знать, где эти библиотеки расположены. Эту задачу решает кэш linker'а, который строится и обновляется утилитой ldconfig.

Этот гайд научит вас управлять путями поиска библиотек: добавлять нестандартные каталоги, обновлять кэш и диагностировать проблемы, когда программа жалуется, что "библиотека не найдена".

Требования / Подготовка

Перед началом убедитесь, что у вас есть:

  • Доступ к терминалу Linux (Ubuntu, Debian, CentOS, Fedora и др.).
  • Права суперпользователя (sudo) для редактирования системных конфигурационных файлов и запуска ldconfig.
  • Базовое понимание структуры файловой системы.
  • Сама библиотека (файл с расширением .so, например libexample.so) должна быть уже скопирована в выбранный каталог.

Пошаговая инструкция

Шаг 1: Проверьте текущий кэш библиотек

Сначала посмотрите, какие пути уже известны системе. Выполните команду:

ldconfig -p

Вывод будет очень объёмным — это список всех библиотек в кэше и их полных путей. Чтобы найти конкретную библиотеку, используйте grep:

ldconfig -p | grep libssl

Если ваша библиотека уже есть в списке, возможно, проблема в другом (например, в версии библиотеки).

Шаг 2: Добавьте новый каталог с библиотеками

Предположим, вы разместили библиотеки в /opt/myapp/lib. Нужно сообщить системе об этом пути.

Способ A (рекомендуемый): Создайте отдельный конфигурационный файл в /etc/ld.so.conf.d/:

echo "/opt/myapp/lib" | sudo tee /etc/ld.so.conf.d/myapp.conf

Способ B: Вручную отредактируйте файл sudo nano /etc/ld.so.conf и добавьте путь в новую строку. Этот способ менее предпочтителен, так как изменения в основном файле сложнее отслеживать.

💡 Совет: Используйте Способ A. Он соответствует Filesystem Hierarchy Standard и позволяет легко включать/отключать пути путём удаления одного файла.

Шаг 3: Обновите кэш

После добавления пути необходимо перестроить кэш. Выполните:

sudo ldconfig

Для отладки запустите с флагом -v (verbose), чтобы увидеть, какие каталоги обрабатываются:

sudo ldconfig -v

В выводе вы увидите строки вида caching file... и scanning.... Убедитесь, что ваш новый путь (/opt/myapp/lib) упоминается.

Шаг 4: Проверьте, что библиотека обнаружена

Повторите проверку из Шага 1, но уже для конкретной библиотеки:

ldconfig -p | grep libexample

Если в выводе появилась строка с полным путём к вашей библиотеке (например, libexample.so (libc6,x86-64) => /opt/myapp/lib/libexample.so), значит, всё настроено правильно.

Шаг 5: Альтернатива — переменная LD_LIBRARY_PATH (временное решение)

Если вам нужно быстро запустить программу без прав администратора или для тестирования, используйте переменную окружения:

export LD_LIBRARY_PATH="/opt/myapp/lib:$LD_LIBRARY_PATH"
./myprogram

Важно: Эта настройка действует только в текущем терминале. Чтобы сделать её постоянной, добавьте строку export LD_LIBRARY_PATH=... в ~/.bashrc или ~/.profile.

Проверка результата

Запустите приложение, которое должно использовать новую библиотеку. Если оно стартует без ошибок "cannot open shared object file", значит, ldconfig сработал.

Также можно проверить зависимости конкретного бинарного файла с помощью утилиты ldd:

ldd /usr/bin/myprogram | grep libexample

В выводе должен отображаться путь, который вы добавили.

Возможные проблемы

Ошибка: "No such file or directory" при запуске ldconfig

Убедитесь, что путь в конфигурационном файле существует и является каталогом, а не отдельным файлом. Проверьте: ls -ld /opt/myapp/lib.

Ошибка: "Permission denied"

Вы запускаете ldconfig без sudo. Все системные операции требуют прав администратора.

Библиотека есть в каталоге, но ldconfig её не находит

  1. Проверьте имя файла. Обычно linker ищет файлы с именами lib<name>.so или lib<name>.so.<version>. Симлинки должны быть корректными.
  2. Убедитесь, что у каталога и файла есть права на чтение для всех пользователей (например, chmod 755 /opt/myapp/lib и chmod 644 /opt/myapp/lib/*.so).

Изменения не применятся после редактирования конфига

Вы могли забыть запустить sudo ldconfig после сохранения файла. Кэш не обновляется автоматически.

LD_LIBRARY_PATH не работает

Убедитесь, что вы экспортируете переменную в той же сессии, где запускаете программу, и что путь указан абсолютный.

Продвинутое использование

Принудительное обновление только одного файла

Если вы заменили библиотеку в уже известном каталоге (например, /usr/lib), можно обновить кэш только для неё:

sudo ldconfig -n /usr/lib

Игнорирование кэша (для отладки)

Чтобы linker игнорировал кэш и искал библиотеки напрямую в стандартных путях, используйте флаг -N при запуске программы:

LD_PRELOAD=/path/to/libexample.so myprogram

Или временно переименуйте кэш-файл: sudo mv /etc/ld.so.cache /etc/ld.so.cache.bak (не рекомендуется в продакшене).

Просмотр информации о конкретной библиотеке

Чтобы узнать, какая версия библиотеки будет загружена по умолчанию, используйте:

ldconfig -p | grep -w libexample

Ключ -w ищет точное совпадение слова, что помогает избежать ложных срабатываний.

Заключение

Утилита ldconfig — простой, но критически важный инструмент администрирования Linux. Правильное управление путями библиотек решает большинство проблем с запуском программ, которые жалуются на отсутствующие .so-файлы. Основной алгоритм: добавить путь в /etc/ld.so.conf.d/, запустить sudo ldconfig, проверить через ldconfig -p. Для временных решений используйте LD_LIBRARY_PATH.

Часто задаваемые вопросы

Что именно делает команда ldconfig?
Нужно ли запускать ldconfig после установки каждой библиотеки вручную?
Как временно добавить путь к библиотекам без редактирования конфигов?
Почему после добавления пути ldconfig всё равно не находит библиотеку?

Полезное

Проверьте текущий кэш библиотек
Добавьте новый каталог с библиотеками
Обновите кэш
Проверьте, что библиотека обнаружена