Používatelia Linuxu sa často stretávajú s chybou načítania zdieľaných knižníc
pri spúšťaní programov a poznajú ju aj mnohí programátori a všetci, ktorí chcú kompilovať softvér vo svojom systéme. Doslova to znamená, že pri načítavaní zdieľaných knižníc došlo k problému.
Chyba"error while loading shared libraries" (chyba pri načítavaní zdieľaných knižníc
) znamená, že pri spúšťaní programu alebo skriptu sa operačnému systému nepodarilo nájsť a načítať jednu alebo viac knižníc, ktoré sú potrebné na fungovanie tohto programu. Ide o bežný problém v operačných systémoch typu UNIX. Keď sa program kompiluje, môže odkazovať na rôzne externé knižnice, ktoré by mali byť k dispozícii počas behu. Ak tieto knižnice chýbajú alebo nie sú k dispozícii, pri načítavaní zdieľaných knižníc sa vyskytne chyba.
Aj keď programy nekompilujete, pri inštalácii nových programov nie prostredníctvom správcu balíkov alebo programov určených pre inú distribúciu sa môže pomerne často vyskytnúť táto chyba: Názov_adresára: nemožno otvoriť súbor zdieľaného objektu: No such file or directory.
Vyskytuje sa preto, lebo systém nemôže nájsť knižnicu. Prečo ju nemožno nájsť a načítať?
Dôvodov je niekoľko, zvyčajne ide o knižnicu, ktorá:
Pri riešení problému sa budeme riadiť týmito dôvodmi a pokúsime sa ich vyriešiť.
Ďalej sa budeme zaoberať konkrétnymi príkladmi riešenia tohto problému na základe dôvodov uvedených v predchádzajúcom odseku.
Nie je tu nič zložité a všetko je úplne jasné - knižnica jednoducho nie je prítomná v systéme, preto sa nám zobrazuje táto chyba. Preto musíme nájsť balík knižnice pomocou správcu balíkov a nainštalovať ho. Zvyčajne sa balíky s knižnicami nazývajú rovnako ako samotné knižnice s predponou lib
.
Ak nám chýba knižnica libfuse2.so
, môžeme ju v Ubuntu nájsť pomocou tohto príkazu:
$ sudo apt search libfuse2
Potom už zostáva len nainštalovať ju:
$ sudo apt install libfuse2
Keď potrebujete zostaviť program zo zdrojových kódov, budete musieť nainštalovať aj hlavičkové súbory:
$ sudo apt install libfuse-dev
A tak je to s každou knižnicou. Ale nie vždy to funguje.
V praxi sa vyskytujú prípady, keď je knižnica nainštalovaná, ale chyba pretrváva a neumožňuje používateľom normálnu interakciu so systémom. Čo robiť v takomto prípade? V prvom rade skontrolujte zavádzač systému Linux, ktorý nemôže nájsť knižnicu. Hľadanie by sa malo vykonať v adresároch uvedených v konfiguračných súboroch /etc/ld.conf.d/
. Spravidla sú to adresáre /usr/lib, /lib, /usr/lib64, /lib64
. Ak je knižnica nainštalovaná v inom adresári, je to zrejme koreň problému.
Pomocou príkazu môžete zistiť, aké knižnice má zavádzač aktuálne k dispozícii:
$ ldconfig -p
Zistite, kde sa nachádza vaša knižnica, pomocou príkazu locate
. Nás napríklad zaujíma knižnica librtfreader.so:
$ locate librtfreader
Keď poznáme umiestnenie knižnice /opt/kingsoft/wps-office/office6/
, musíme zavádzaču umožniť, aby túto knižnicu zistil. Do konfiguračného súboru alebo do premennej LD_LIBRARY_PATH
pridáme cestu /etc/ld.so.conf.d/
:
export LD_LIBRARY_PATH=/opt/kingsoft/wps-office/office6/
Môžete inštalovať s ľubovoľnou knižnicou, ktorá vyvolá chybu. Môžete tiež zvoliť menej komplikovanú cestu vytvorenia symbolického odkazu na správnu knižnicu v správnom adresári:
ln -s /opt/kingsoft/wps-office/office6/librtfreader.so /usr/lib/librtfreader.so
Toto sa zvyčajne stáva pri používaní programov pre distribúciu, ktorú nemáte nainštalovanú. Každá knižnica má dodatočnú verziu, ktorá sa zapisuje za príponu .so.
Napríklad libav.so.1
. Číslo verzie sa mení vždy, keď sa knižnica opraví.
Často sa stáva, že v jednej distribúcii je program zostavený so závislou knižnicou, napríklad libc .so.1
, a v inej distribúcii je len libc.so.2
. Vo väčšine prípadov sú tu rozdiely malé a program by mohol bežať na druhej verzii knižnice. Môžeme teda jednoducho vytvoriť symbolický odkaz na ňu.
Napríklad knižnica libusb-1.0.so.1
neexistuje. Existuje však libusb-1.0.so.0.1
a tú môžeme použiť:
Ak to chceme urobiť, jednoducho vytvoríme symbolický odkaz na knižnicu:
$ sudo ln -s /usr/lib/libusb-1.0.so.0.1 /usr/lib/libusb-1.0.so.1
Často si program túto zámenu nevšimne a bude fungovať. Ako inteligentné riešenie skúste nájsť na internete správnu verziu knižnice pre vašu architektúru a umiestnite ju do priečinka /usr/lib/
alebo /usr/lib64/
. Potom je však žiaduce aktualizovať vyrovnávaciu pamäť:
$ sudo ldconfig
Ak problém pretrváva aj po týchto krokoch, odporúčame pozrieť si dokumentáciu programu alebo operačného systému, kde nájdete podrobnejšie informácie o požadovaných verziách knižníc a spôsobe ich inštalácie.