GNU/Linux >> Znalost Linux >  >> Linux

Chyba Linuxu při načítání sdílených knihoven:nelze otevřít soubor sdíleného objektu:Žádný takový soubor nebo adresář

Vaše knihovna je dynamická knihovna. Musíte operačnímu systému sdělit, kde ji může za běhu najít.

K tomu budeme muset provést tyto snadné kroky:

(1) Zjistěte, kde je knihovna umístěna, pokud ji neznáte.

sudo find / -name the_name_of_the_file.so

(2) Zkontrolujte existenci proměnné prostředí cesty dynamické knihovny (LD_LIBRARY_PATH )

$ echo $LD_LIBRARY_PATH

pokud zde není nic k zobrazení, přidejte výchozí hodnotu cesty (nebo ne, pokud chcete)

$ LD_LIBRARY_PATH=/usr/local/lib

(3) Přidáme cestu přání, exportujeme ji a vyzkoušíme aplikaci.

Všimněte si, že cesta by měla být adresář, kde je path.so.something is.So if path.so.something je v /my_library/path.so.something mělo by to být:

$ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my_library/
$ export LD_LIBRARY_PATH
$ ./my_app

zdroj:http://www.gnu.org/software/gsl/manual/html_node/Shared-Libraries.html


Zde je několik řešení, která můžete vyzkoušet:

ldconfig

Jak zdůraznil AbiusX:Pokud jste právě nainstalovali knihovnu, možná budete muset jednoduše spustit ldconfig.

sudo ldconfig

ldconfig vytvoří potřebné odkazy a mezipaměť na nejnovější sdílené knihovny nalezené v adresářích zadaných na příkazovém řádku, v souboru /etc/ld.so.conf a v důvěryhodných adresářích (/lib a /usr/lib).

Obvykle se o to postará váš správce balíčků, když instalujete novou knihovnu, ale ne vždy, a nebude na škodu spustit ldconfig, i když to není váš problém.

Vývojářský balíček nebo nesprávná verze

Pokud to nefunguje, také bych se podíval na Paulův návrh a hledal "-dev" verzi knihovny. Mnoho knihoven je rozděleno na balíčky pro vývojáře a balíčky, které nejsou pro vývojáře. K jeho vyhledání můžete použít tento příkaz:

apt-cache search <libraryname>

To může také pomoci, pokud máte jednoduše nainstalovanou špatnou verzi knihovny. Některé knihovny jsou publikovány v různých verzích současně, například Python.

Umístění knihovny

Pokud jste si jisti, že je nainstalován správný balíček a ldconfig jej nenašel, může být pouze v nestandardním adresáři. Ve výchozím nastavení vypadá ldconfig v /lib , /usr/lib a adresáře uvedené v /etc/ld.so.conf a $LD_LIBRARY_PATH . Pokud je vaše knihovna někde jinde, můžete buď přidat adresář na samostatný řádek v /etc/ld.so.conf , přidejte cestu knihovny do $LD_LIBRARY_PATH nebo přesuňte knihovnu do /usr/lib . Poté spusťte ldconfig .

Chcete-li zjistit, kde se knihovna nachází, zkuste toto:

sudo find / -iname *libraryname*.so*

(Nahraďte libraryname s názvem vaší knihovny)

Pokud půjdete na $LD_LIBRARY_PATH trasu, budete to chtít vložit do ~/.bashrc soubor, takže se spustí pokaždé, když se přihlásíte:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/library

Aktualizovat
I když to, co píšu níže, platí jako obecná odpověď o sdílených knihovnách, myslím si, že nejčastější příčinou těchto druhů zpráv je to, že jste nainstalovali balíček, ale nenainstalovali jste verzi "-dev" tohoto balíčku.

No, nelže – žádné libpthread_rt.so.1 neexistuje v tom výpisu. Pravděpodobně ji budete muset překonfigurovat a znovu sestavit tak, aby závisela na knihovně, kterou máte, nebo nainstalovat cokoliv poskytuje libpthread_rt.so.1 .

Obecně platí, že čísla za .so jsou čísla verzí a často zjistíte, že se jedná o vzájemné symbolické odkazy, takže pokud máte verzi 1.1 libfoo.so, budete mít skutečný soubor libfoo.so.1.0, a symbolické odkazy foo.so a foo.so.1 ukazující na libfoo.so.1.0. A pokud nainstalujete verzi 1.1, aniž byste odstranili tu druhou, budete mít libfoo.so.1.1 a libfoo.so.1 a libfoo.so budou nyní ukazovat na novou verzi, ale jakýkoli kód, který vyžaduje tuto přesnou verzi, může použijte soubor libfoo.so.1.0. Kód, který se spoléhá pouze na API verze 1, ale nezáleží na tom, zda je 1.0 nebo 1.1, bude specifikovat libfoo.so.1. Jak orip zdůraznil v komentářích, je to dobře vysvětleno na http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html.

Ve vašem případě můžete pryč se symbolickým odkazem libpthread_rt.so.1 na libpthread_rt.so . Žádné záruky, že neporuší váš kód a nesní vaše televizní večeře.


Linux
  1. Jak vyřešit chybu „nelze otevřít soubor sdíleného objektu“ v distribucích Linuxu založených na Ubuntu

  2. Chyba při načítání sdílených knihoven libcrypto.so.1.1 – OpenSSL [Oprava]

  3. Jak opravit „chybu při načítání sdílených knihoven:libgtk-x11-2.0.so.0“

  1. Rpm:Chyba při načítání sdílených knihoven:Libz.so.1:Nelze otevřít soubor sdíleného objektu:Žádný takový soubor

  2. libstdc++.so.5:nelze otevřít soubor sdíleného objektu - ale knihovna je nainstalovaná a aktuální

  3. chyba při načítání sdílených knihoven:libncurses.so.5:

  1. libpulse.so.0:nelze otevřít soubor sdíleného objektu:Žádný takový soubor nebo adresář

  2. ImportError:libcblas.so.3:nelze otevřít soubor sdíleného objektu:Žádný takový soubor nebo adresář

  3. touch:nelze se dotknout `foo':Žádný takový soubor nebo adresář