Способы оплаты Abuse

Ошибка error while loading shared libraries

21.02.2024, 22:45

Часто пользователи Linux сталкиваются с ошибкой error loading shared libraries во время запуска программ, также она знакома многим программистам и всем желающие компилировать ПО в своей системе. Дословно в переводе с английского она означает что возникла проблема во время загрузки общей библиотеки. 

Подробней об ошибке error while loading shared libraries

Ошибка error while loading shared libraries" означает что при запуске программы или скрипта операционная система не смогла найти и загрузить одну или несколько библиотек, которые необходимы для работы этой программы. Это частая проблема в UNIX-подобных операционных системах. Когда программа компилируется, она может ссылаться на различные внешние библиотеки, которые должны быть доступны во время выполнения. Если эти библиотеки отсутствуют или недоступны, то возникает error while loading shared libraries.

Даже если вы не компилируете свои программы, то вы можете увидеть данную ошибку: имя_библиотеки: cannot open shared object file: No such file or directory достаточно часто во время установки новых программ не через пакетный менеджер или программ, предназначенных для другого дистрибутива. Она возникает потому, что система не может найти библиотеку. Почему ее нельзя найти и загрузить?

Несколько причин, как правило всё сводится к библиотеке, которая:

  • не установлена в системе;
  • установлена, но неизвестно куда;
  • установлена правильно, но имеет не ту версию.

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

Как устранить ошибку error loading shared libraries?

Дальше рассмотрим конкретные примеры решения данной проблемы исходя из тех причин, которые были озвучены в предыдущем абзаце.

Библиотека не установлена

Здесь ничего сложного и всё предельно понятно - библиотеки просто нет в системе, поэтому мы и получаем такую ошибку. Поэтому для решения нужно найти пакет библиотеки с помощью пакетного менеджера и установить ее. Обычно, пакеты с библиотеками называются так же, как и сами библиотеки с префиксом lib.

Ели нам не хватает библиотеки libfuse2.so, то мы можем найти ее в Ubuntu такой командой:

$ sudo apt search libfuse2

Затем осталось только установить ее:

$ sudo apt install libfuse2

Когда нужно собрать программу из исходников, придется также ещё установить заголовочные файлы:

$ sudo apt install libfuse-dev

И так для любой библиотеки. Но это не всегда помогает.

Библиотека находится не в том каталоге

На практике встречаются такие случаи, когда библиотека установлена, но ошибка сохраняется и не дает пользователи нормально взаимодействовать с системой. Что делать в таком случае? Для начала - проверьте загрузчик Linux, который не может найти библиотеку. Поиск нужно выполнить по каталам, которые указаны в конфигурационных файлах /etc/ld.conf.d/. Как правило, это /usr/lib, /lib, /usr/lib64, /lib64. Если библиотека установлена в другой каталог, то, очевидно, это и есть корень проблемы.

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

$ ldconfig -p

Найти, где находится ваша библиотека можно с помощью команды locate. Например, нас интересует библиотека librtfreader.so:

$ locate librtfreader

Когда мы знаем месторасположения /opt/kingsoft/wps-office/office6/, необходимо сделать чтобы загрузчик могут обнаружить библиотеку. Добавляем в конфигурационный файл путь /etc/ld.so.conf.d/ или в переменную LD_LIBRARY_PATH:

export LD_LIBRARY_PATH=/opt/kingsoft/wps-office/office6/

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

ln -s /opt/kingsoft/wps-office/office6/librtfreader.so /usr/lib/librtfreader.so

Неверная версия библиотеки

Обычно такое происходит при использовании программ для дистрибутива, который у вас не установлен. Каждая библиотека имеет дополнительную версию, которая записывается после расширения .so. Например, libav.so.1. Номер версии меняется всякий раз, когда в библиотеку вносятся исправления.

Часто возникает ситуация, когда в одном дистрибутиве программа собирается с зависимостью от библиотеки, например, libc.so.1, а в другом есть только libc.so.2. Отличия в большинстве случаев здесь небольшие и программа могла бы работать на второй версии библиотеки. Поэтому мы можем просто создать символическую ссылку на нее.

Например, библиотеки libusb-1.0.so.1 нет. Но зато есть libusb-1.0.so.0.1, и мы можем ее использовать:

Для этого просто создаем символическую ссылку на библиотеку:

 $ sudo ln -s /usr/lib/libusb-1.0.so.0.1 /usr/lib/libusb-1.0.so.1

Зачастую программа не заметит подмены и будет работать. В качестве толкового решения попробуйте найти нужную версию библиотеки в интернете для своей архитектуры и поместить ее в папку /usr/lib/ или /usr/lib64/. Но после этого желательно обновить кэш:

$ sudo ldconfig

Если после выполнения этих действий проблема не решится, рекомендуется обратиться к документации программы или операционной системы для получения более подробной информации о требуемых версиях библиотек и способах их установки.