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

Помилка під час завантаження спільних бібліотек

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.

Навіть якщо ви не компілюєте свої програми, то ви можете побачити цю помилку: directory_name: 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

Якщо після виконання цих дій проблема не вирішиться, рекомендується звернутися до документації програми або операційної системи для отримання докладнішої інформації про необхідні версії бібліотек і способи їх встановлення.