Корисници Линукса често наилазе на грешку error loading shared libraries
приликом покретања програма, а она је позната и многим програмерима и свима који желе да компајлирају софтвер на свом систему. Дословно преведено са енглеског, то значи да је дошло до проблема приликом учитавања дељене библиотеке.
Грешка „ error while loading shared libraries
“ значи да када покренете програм или скрипту, оперативни систем није могао да пронађе и учита једну или више библиотека које су потребне за рад програма. Ово је чест проблем у оперативним системима сличним UNIX-у. Када се програм компајлира, он може да референцира разне екстерне библиотеке које морају бити доступне током извршавања. Ако ове библиотеке недостају или нису доступне, онда се јавља грешка при учитавању дељених библиотека.
Чак и ако не компајлирате своје програме, можете видети ову грешку: directory_name: cannot open shared object file: No such file or directory
прилично често приликом инсталирања нових програма који нису преко менаџера пакета или програма намењених за другу дистрибуцију. До тога долази зато што систем не може да пронађе библиотеку. Зашто се не може пронаћи и учитати?
Постоји неколико разлога, обично се све своди на библиотеку која:
Приликом решавања проблема, водићемо се овим разлозима и покушаћемо да их решимо.
Затим ћемо погледати конкретне примере решења овог проблема на основу разлога који су изнети у претходном пасусу.
Овде нема ништа компликовано и све је врло јасно - библиотека једноставно не постоји у систему, зато добијамо такву грешку. Стога, да бисте решили ово, потребно је да пронађете пакет библиотеке помоћу менаџера пакета и инсталирате га. Обично се пакети са библиотекама зову исто као и саме библиотеке са префиксом lib
.
Ако нам недостаје библиотека libfuse2.so
, можемо је пронаћи у Убунтуу помоћу ове команде:
$ sudo apt search libfuse2
Онда је све што преостаје да се инсталира:
$ sudo apt install libfuse2
Када треба да компајлирате програм из изворног кода, мораћете да инсталирате и заглавне датотеке:
$ sudo apt install libfuse-dev
И тако за сваку библиотеку. Али то не помаже увек.
У пракси постоје случајеви када је библиотека инсталирана, али грешка и даље постоји и не дозвољава корисницима да нормално комуницирају са системом. Шта урадити у овом случају? Прво, проверите покретачки програм Линукса, који не може да пронађе библиотеку. Претрага се мора извршити у директоријумима наведеним у конфигурационим датотекама /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
Ако ови кораци не реше проблем, препоручујемо вам да погледате документацију програма или оперативног система за детаљније информације о потребним верзијама библиотека и начину њихове инсталације.