Způsoby platby Abuse

Ошибка chyba při načítání sdílených knihoven

21.02.2024, 22:45

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.

Další informace o chybě při načítání sdílených knihoven

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á:

  • není v systému nainstalována;
  • je nainstalována, ale je na špatném místě;
  • je nainstalována správně, ale má nesprávnou verzi.

Při řešení problému se budeme řídit těmito důvody a pokusíme se je vyřešit.

Jak opravit chybu načítání sdílených knihoven?

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.

Knihovna není nainstalována

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.

Knihovna je ve špatném katalogu

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

Nesprávná verze knihovny

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.