Uživatelé Linuxu se s chybou načítání sdílených knihoven
často setkávají při spouštění programů a znají ji také mnozí programátoři a všichni, kdo chtějí kompilovat software ve svém systému. Doslova to znamená, že při načítání sdílených knihoven došlo k problému.
Chyba"chyba při načítání sdílených knihoven
" znamená, že při spouštění programu nebo skriptu nemohl operační systém najít a načíst jednu nebo více knihoven, které jsou nezbytné pro fungování tohoto programu. Jedná se o běžný problém v operačních systémech typu UNIX. Při kompilaci programu se může program odkazovat na různé externí knihovny, které by měly být za běhu k dispozici. Pokud tyto knihovny chybí nebo nejsou k dispozici, dojde k chybě při načítání sdílených knihoven.
I když programy nekompilujete, může se tato chyba: Název_adresáře: nelze otevřít soubor se sdílenými objekty: Žádný takový soubor nebo adresář
objevit poměrně často při instalaci nových programů, které nejsou instalovány prostřednictvím správce balíčků, nebo programů určených pro jinou distribuci. Dochází k ní proto, že systém nemůže najít knihovnu. Proč ji nelze najít a načíst?
Důvodů je několik, většinou jde o knihovnu, která:
Při řešení problému se budeme řídit těmito důvody a pokusíme se je vyřešit.
Dále si rozebereme konkrétní příklady řešení tohoto problému na základě důvodů uvedených v předchozím odstavci.
Zde není nic složitého a vše je zcela jasné - knihovna prostě není v systému přítomna, proto se nám zobrazuje tato chyba. Proto musíme balíček knihovny najít pomocí správce balíčků a nainstalovat jej. Obvykle se balíčky s knihovnami nazývají stejně jako samotné knihovny s předponou lib
.
Pokud nám chybí knihovna libfuse2.so
, můžeme ji v Ubuntu najít pomocí tohoto příkazu:
$ sudo apt search libfuse2
Pak už zbývá jen ji nainstalovat:
$ sudo apt install libfuse2
Pokud potřebujete sestavit program ze zdrojových kódů, musíte nainstalovat také hlavičkové soubory:
$ sudo apt install libfuse-dev
A tak je to s každou knihovnou. Ale ne vždy to funguje.
V praxi se vyskytují případy, kdy je knihovna nainstalována, ale chyba přetrvává a neumožňuje uživatelům normálně pracovat se systémem. Co v takovém případě dělat? Nejprve zkontrolujte zavaděč systému Linux, který nemůže knihovnu najít. Hledání by mělo být provedeno v adresářích uvedených v konfiguračních souborech /etc/ld.conf.d/
. Zpravidla se jedná o adresáře /usr/lib, /lib, /usr/lib64, /lib64
. Pokud je knihovna nainstalována v jiném adresáři, je to zřejmě příčinou problému.
Pomocí příkazu můžete zjistit, jaké knihovny má zavaděč aktuálně k dispozici:
$ ldconfig -p
Pomocí příkazu locate
zjistěte, kde se nachází vaše knihovna. Nás například zajímá knihovna librtfreader.so:
$ locate librtfreader
Když známe umístění /opt/kingsoft/wps-office/office6/
, musíme zavaděči umožnit, aby knihovnu detekoval. Do konfiguračního souboru nebo do proměnné LD_LIBRARY_PATH
přidáme cestu /etc/ld.so.conf.d/
:
export LD_LIBRARY_PATH=/opt/kingsoft/wps-office/office6/
Můžete instalovat s libovolnou knihovnou, která vyvolá chybu. Můžete také zvolit méně komplikovanou cestu vytvoření symbolického odkazu na správnou knihovnu ve správném adresáři:
ln -s /opt/kingsoft/wps-office/office6/librtfreader.so /usr/lib/librtfreader.so
K tomu obvykle dochází při použití programů pro distribuci, kterou nemáte nainstalovanou. Každá knihovna má další verzi, která se zapisuje za příponu .so.
Například libav.so.1
. Číslo verze se mění vždy, když je knihovna opravena.
Často se stává, že v jedné distribuci je program sestaven se závislostí na knihovně, například libc .so.1
, a v jiné distribuci je pouze libc.so.2
. Ve většině případů jsou zde rozdíly malé a program by mohl běžet na druhé verzi knihovny. Můžeme tedy jednoduše vytvořit symbolický odkaz na ni.
Například knihovna libusb-1.0.so.1
neexistuje. Existuje však knihovna libusb-1.0.so.0.1
a tu můžeme použít:
Za tímto účelem jednoduše vytvoříme symbolický odkaz na knihovnu:
$ sudo ln -s /usr/lib/libusb-1.0.so.0.1 /usr/lib/libusb-1.0.so.1
Často si program záměny nevšimne a bude fungovat. Chytrým řešením je zkusit najít na internetu správnou verzi knihovny pro vaši architekturu a umístit ji do složky /usr/lib/
nebo /usr/lib64/
. Poté je však žádoucí aktualizovat mezipaměť:
$ sudo ldconfig
Pokud problém přetrvává i po těchto krocích, doporučujeme nahlédnout do dokumentace programu nebo operačního systému, kde najdete podrobnější informace o požadovaných verzích knihoven a způsobu jejich instalace.