Linux ld.soВысокая

Ошибка ld.so в Linux: причины и способы решения

Статья объясняет, что означает ошибка ld.so в Linux, и предоставляет несколько способов её исправить: установка библиотек, настройка переменных окружения и обновление кэша.

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

Что означает ошибка ld.so

Ошибка ld.so (или ld-linux.so) возникает, когда динамический компоновщик Linux не может найти разделяемую библиотеку (shared library), необходимую для запуска программы. Полное сообщение обычно выглядит так:

error while loading shared libraries: libexample.so.1: cannot open shared object file: No such file or directory

Это означает, что исполняемый файл требует библиотеку libexample.so.1, но загрузчик не находит её в стандартных путях. Ошибка появляется сразу при попытке запуска команды в терминале и предотвращает выполнение программы.

Причины возникновения

  1. Не установлена необходимая библиотека — программа зависит от библиотеки, которая отсутствует в системе.
  2. Библиотека установлена в нестандартный путь — загрузчик ищет библиотеки только в каталогах, указанных в /etc/ld.so.conf и переменной LD_LIBRARY_PATH.
  3. Неправильные права доступа — у текущего пользователя нет прав на чтение файла библиотеки.
  4. Повреждение библиотеки — файл библиотеки повреждён или имеет неверный формат.
  5. Несоответствие архитектуры — например, 32-битная библиотека для 64-битной программы (или наоборот).
  6. Устаревшая версия библиотеки — программа требует конкретную версию (например, libssl.so.1.1), а в системе установлена другая (например, libssl.so.3).

Способ 1: Установка недостающей библиотеки

Самый частый случай — библиотека просто не установлена. Сначала определите, какой пакет предоставляет нужную библиотеку.

Для Ubuntu/Debian:

# Поиск пакета, содержащего библиотеку (например, libssl.so.1.1)
apt-file search libssl.so.1.1
# Если apt-file не установлен, сначала установите его:
sudo apt update && sudo apt install apt-file && sudo apt-file update
# Затем установите найденный пакет:
sudo apt install libssl1.1

Для CentOS/RHEL/Fedora:

# Поиск пакета
yum provides */libssl.so.1.1
# Или для Fedora с dnf:
dnf provides */libssl.so.1.1
# Установка пакета:
sudo yum install openssl-libs
# или
sudo dnf install openssl-libs

⚠️ Важно: Имя библиотеки в ошибке (например, libssl.so.1.1) может отличаться от имени пакета. Убедитесь, что устанавливаете пакет с соответствующей версией.

Способ 2: Добавление пути к библиотекам в LD_LIBRARY_PATH

Если библиотека уже есть в системе, но находится в нестандартном каталоге (например, в /home/user/app/lib), вы можете временно добавить этот путь в переменную окружения LD_LIBRARY_PATH.

# Для текущей сессии терминала:
export LD_LIBRARY_PATH=/home/user/app/lib:$LD_LIBRARY_PATH
# Затем попробуйте запустить программу снова.

Чтобы сделать изменение постоянным, добавьте строку в ~/.bashrc или ~/.profile:

echo 'export LD_LIBRARY_PATH="/home/user/app/lib:$LD_LIBRARY_PATH"' >> ~/.bashrc
source ~/.bashrc

💡 Совет: Используйте этот способ только для пользовательских установок. Для системных библиотек лучше настроить ldconfig (см. Способ 3).

Способ 3: Обновление кэша библиотек (ldconfig)

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

# Добавьте каталог в конфигурацию ld.so, если его там нет:
echo '/usr/local/lib' | sudo tee -a /etc/ld.so.conf.d/custom.conf
# Обновите кэш:
sudo ldconfig

После этого загрузчик будет знать о новых библиотеках. Проверьте, видна ли библиотека:

ldconfig -p | grep libexample

Способ 4: Проверка архитектуры и зависимостей

Убедитесь, что архитектура библиотеки соответствует программе.

# Проверка архитектуры библиотеки:
file /usr/lib/x86_64-linux-gnu/libexample.so.1
# Пример вывода: libexample.so.1: ELF 64-bit LSB shared object, x86-64, ...

# Проверка архитектуры исполняемого файла:
file /usr/bin/example-program

Если программа 64-битная, а библиотека 32-битная (или наоборот), нужно установить библиотеку правильной архитектуры. Например, в Ubuntu для 32-битных библиотек есть пакеты с суффиксом :i386.

Также проверьте все зависимости программы с помощью ldd:

ldd /usr/bin/example-program

Эта команда покажет, какие библиотеки загружаются и какие из них не найдены (отметка not found).

Способ 5: Переустановка приложения

Если библиотека поставляется вместе с приложением (например, в папке app/lib), возможно, файлы повреждены или неполные. Переустановите приложение:

# Для приложения, установленного из репозитория:
sudo apt reinstall example-package
# Для приложения, скачанного вручную:
# Удалите папку приложения и загрузите заново.

Если приложение использует локальные библиотеки, убедитесь, что скрипт запуска правильно задаёт LD_LIBRARY_PATH или использует rpath.

Профилактика

  • Устанавливайте библиотеки из официальных репозиториев — это гарантирует совместимость и автоматическое обновление.
  • При компиляции программ из исходников используйте --prefix=/usr/local и выполняйте sudo ldconfig после make install.
  • Избегайте ручного копирования библиотек в системные пути без обновления кэша.
  • Регулярно обновляйте системуsudo apt update && sudo apt upgrade (или аналоги для вашего дистрибутива).
  • Используйте контейнеры (Docker) для изоляции зависимостей, если нужно избежать конфликтов библиотек.

Если проблема возникает у нескольких программ одновременно, возможно, повреждены системные библиотеки. В таком случае рассмотрите восстановление пакетов:

# Ubuntu/Debian:
sudo apt install --reinstall libc6 libstdc++6
# CentOS/RHEL:
sudo yum reinstall glibc libstdc++

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

Что такое ld.so и зачем он нужен?
Как определить, какой именно файл библиотеки отсутствует?
Можно ли временно обойти ошибку, не устанавливая библиотеку?
Почему после установки библиотеки ошибка остаётся?

Полезное

Определите отсутствующую библиотеку
Установите недостающую библиотеку
Обновите кэш библиотек
Настройте LD_LIBRARY_PATH при необходимости
Проверьте архитектуру библиотеки
Переустановите приложение

Эта статья помогла вам решить проблему?