Часто пользователи Linux сталкиваются с ошибкой error loading shared libraries во время запуска программ, также она знакома многим программистам и всем желающие компилировать ПО в своей системе. Дословно в переводе с английского она означает что возникла проблема во время загрузки общей библиотеки.
Ошибка error while loading shared libraries" означает что при запуске программы или скрипта операционная система не смогла найти и загрузить одну или несколько библиотек, которые необходимы для работы этой программы. Это частая проблема в UNIX-подобных операционных системах. Когда программа компилируется, она может ссылаться на различные внешние библиотеки, которые должны быть доступны во время выполнения. Если эти библиотеки отсутствуют или недоступны, то возникает error while loading shared libraries.
Даже если вы не компилируете свои программы, то вы можете увидеть данную ошибку: имя_библиотеки: cannot open shared object file: No such file or directory достаточно часто во время установки новых программ не через пакетный менеджер или программ, предназначенных для другого дистрибутива. Она возникает потому, что система не может найти библиотеку. Почему ее нельзя найти и загрузить?
Несколько причин, как правило всё сводится к библиотеке, которая:
При решении проблемы мы будем руководствоваться именно этими причинами и пытаться их решить.
Дальше рассмотрим конкретные примеры решения данной проблемы исходя из тех причин, которые были озвучены в предыдущем абзаце.
Здесь ничего сложного и всё предельно понятно - библиотеки просто нет в системе, поэтому мы и получаем такую ошибку. Поэтому для решения нужно найти пакет библиотеки с помощью пакетного менеджера и установить ее. Обычно, пакеты с библиотеками называются так же, как и сами библиотеки с префиксом lib.
Ели нам не хватает библиотеки libfuse2.so, то мы можем найти ее в Ubuntu такой командой:
Затем осталось только установить ее:
Когда нужно собрать программу из исходников, придется также ещё установить заголовочные файлы:
И так для любой библиотеки. Но это не всегда помогает.
На практике встречаются такие случаи, когда библиотека установлена, но ошибка сохраняется и не дает пользователи нормально взаимодействовать с системой. Что делать в таком случае? Для начала - проверьте загрузчик Linux, который не может найти библиотеку. Поиск нужно выполнить по каталам, которые указаны в конфигурационных файлах /etc/ld.conf.d/. Как правило, это /usr/lib, /lib, /usr/lib64, /lib64. Если библиотека установлена в другой каталог, то, очевидно, это и есть корень проблемы.
Вы можете посмотреть какие библиотеки сейчас доступны загрузчику с помощью команды:
Найти, где находится ваша библиотека можно с помощью команды locate. Например, нас интересует библиотека librtfreader.so:
Когда мы знаем месторасположения /opt/kingsoft/wps-office/office6/, необходимо сделать чтобы загрузчик могут обнаружить библиотеку. Добавляем в конфигурационный файл путь /etc/ld.so.conf.d/ или в переменную LD_LIBRARY_PATH:
Вы можете установить с любой библиотекой, которая взывает ошибку. Также можно пойти по менее сложному пути - создать символическую ссылку на нужную библиотеку в корректном каталоге:
Обычно такое происходит при использовании программ для дистрибутива, который у вас не установлен. Каждая библиотека имеет дополнительную версию, которая записывается после расширения .so. Например, libav.so.1. Номер версии меняется всякий раз, когда в библиотеку вносятся исправления.
Часто возникает ситуация, когда в одном дистрибутиве программа собирается с зависимостью от библиотеки, например, libc.so.1, а в другом есть только libc.so.2. Отличия в большинстве случаев здесь небольшие и программа могла бы работать на второй версии библиотеки. Поэтому мы можем просто создать символическую ссылку на нее.
Например, библиотеки libusb-1.0.so.1 нет. Но зато есть libusb-1.0.so.0.1, и мы можем ее использовать:
Для этого просто создаем символическую ссылку на библиотеку:
Зачастую программа не заметит подмены и будет работать. В качестве толкового решения попробуйте найти нужную версию библиотеки в интернете для своей архитектуры и поместить ее в папку /usr/lib/ или /usr/lib64/. Но после этого желательно обновить кэш:
Если после выполнения этих действий проблема не решится, рекомендуется обратиться к документации программы или операционной системы для получения более подробной информации о требуемых версиях библиотек и способах их установки.
Примените скидку, вставив промокод в специальное поле при оформлении заказа:
Примените скидку, вставив промокод в специальное поле при оформлении заказа: