Что означает ошибка "dependency missing"
Ошибка "dependency missing" (отсутствует зависимость) — это сообщение от пакетного менеджера или загрузчика динамических библиотек (например, ld.so), которое указывает, что для корректной работы программы или установки пакета не хватает необходимых компонентов — библиотек (.so файлы в Linux), других пакетов или модулей.
Типичные сценарии появления:
- При попытке запуска программы:
error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory. - При установке пакета через
apt,yum,dnfилиpacman:unmet dependenciesилиdependency ... is not installable. - При компиляции программ из исходного кода:
configure: error: libxyz not found.
Эта ошибка блокирует выполнение или установку ПО и требует вмешательства администратора.
Причины возникновения
- Неполная установка. Пакет был установлен без его зависимостей (например, принудительно через
dpkg -iбез предварительногоapt-get -f install). - Устаревшие репозитории. Вы используете дистрибутив или репозиторий, в котором нужная версия библиотеки отсутствует.
- Конфликт версий. Установлена более новая или, наоборот, устаревшая версия библиотеки, несовместимая с требуемой.
- Программа из стороннего источника. Вы скачали бинарный файл (.deb, .rpm) или архив, собранный для другой версии ОС или другого дистрибутива.
- Ручная компиляция без
make install. Исходники скомпилированы, но библиотеки установлены в/usr/local/lib, а система их не ищет. - Повреждённый кэш пакетного менеджера. Локальные метаданные о пакетах устарели или повреждены.
Способ 1: Установка недостающего пакета через менеджер пакетов (рекомендуемый)
Это основной и самый правильный способ. Вы находите пакет, предоставляющий нужную библиотеку, и устанавливаете его официальным пакетным менеджером.
- Определите имя недостающей библиотеки. Из текста ошибки извлеките имя. Например, для
libssl.so.1.1искомое имя —libssl1.1(илиopensslв некоторых дистрибутивах). - Найдите пакет, владеющий этой библиотекой.
- Debian/Ubuntu:
apt-file search libssl.so.1.1(предварительно установитеapt-fileи выполнитеapt-file update). Или проще:apt search libssl. - CentOS/RHEL/Fedora:
yum provides */libssl.so.1.1илиdnf provides libssl.so.1.1. - Arch Linux:
pacman -F libssl.so.1.1(требуется включить базу данныхcommunity).
- Debian/Ubuntu:
- Установите найденный пакет. Например, для Ubuntu:
Для CentOS 7:sudo apt update sudo apt install libssl1.1sudo yum install openssl-libs - Повторите исходное действие (установку или запуск программы). Зависимость должна быть удовлетворена.
Способ 2: Ручное добавление пути к библиотекам (временное решение)
Если библиотека установлена, но находится в нестандартном месте (например, в /opt/lib), система её не видит.
- Найдите библиотеку:
sudo find / -name "libssl.so.1.1" 2>/dev/null. - Временно добавьте путь в переменную окружения
LD_LIBRARY_PATHперед запуском программы:export LD_LIBRARY_PATH=/путь/к/библиотеке:$LD_LIBRARY_PATH ./ваша_программа - Для постоянного решения добавьте путь в файл
/etc/ld.so.conf.d/custom.confи выполнитеsudo ldconfig.
Способ 3: Использование универсальных форматов пакетов (Snap, Flatpak)
Если проблема возникает из-за несовместимости системных библиотек, запустите приложение в контейнере.
- Установите Snap или Flatpak (если ещё нет):
# Для Ubuntu/Debian (Snap обычно уже есть) sudo apt install snapd # Для Fedora (Flatpak) sudo dnf install flatpak - Найдите и установите приложение в нужном формате. Например, для Discord:
Такие приложения содержат все зависимости внутри себя и не зависят от версий системных библиотек.sudo snap install discord # или flatpak install flathub com.discordapp.Discord
Способ 4: Пересборка ПО из исходников с правильными флагами
Если вы компилируете программу самостоятельно, убедитесь, что система знает, где искать заголовочные файлы и библиотеки.
- Установите пакеты разработки (
-devили-devel). Например, для OpenSSL:- Ubuntu/Debian:
sudo apt install libssl-dev - CentOS/RHEL:
sudo yum install openssl-devel
- Ubuntu/Debian:
- При запуске
./configureукажите пути, если библиотеки установлены нестандартно:./configure --with-ssl-libs=/путь/к/библиотекам --prefix=/usr/local - Выполните
make && sudo make install.
Профилактика
- Всегда используйте официальные репозитории и пакетный менеджер для установки ПО. Избегайте
dpkg -i/rpm -iбез предварительного разрешения зависимостей. - Обновляйте систему регулярно:
sudo apt update && sudo apt upgradeилиsudo dnf upgrade. Это обеспечивает совместимость версий библиотек. - Проверяйте совместимость сторонних пакетов (.deb, .rpm) с вашей версией дистрибутива.
- Для разработчиков: используйте виртуальные окружения (
venv,virtualenv,conda) или контейнеры (Docker) для изоляции зависимостей проекта от системных. - При ручной компиляции внимательно читайте вывод
./configureилиcmake. Он обычно явно указывает на недостающие компоненты.
💡 Совет: Если вы часто сталкиваетесь с этой ошибкой на определённом дистрибутиве, проверьте, не используете ли вы устаревшую версию ОС. Рассмотрите возможность обновления до последнего стабильного релиза.