A Linux-felhasználók gyakran találkoznak a megosztott könyvtárak betöltési
hibájával a programok futtatásakor, és ez a hiba sok programozó és mindenki számára ismerős, aki szoftvert szeretne fordítani a rendszerén. Szó szerint azt jelenti, hogy probléma van a megosztott könyvtárak betöltése közben.
A "hiba megosztott könyvtárak betöltése közben"
hiba azt jelenti, hogy egy program vagy szkript futtatásakor az operációs rendszer nem tudott megtalálni és betölteni egy vagy több olyan könyvtárat, amely szükséges a program működéséhez. Ez gyakori probléma a UNIX-szerű operációs rendszerekben. Egy program fordításakor különböző külső könyvtárakra hivatkozhat, amelyeknek futáskor rendelkezésre kell állniuk. Ha ezek a könyvtárak hiányoznak vagy nem állnak rendelkezésre, akkor a megosztott könyvtárak betöltése során hiba lép fel.
Még ha nem is fordítjuk le a programjainkat, akkor is elég gyakran megjelenhet ez a hiba: directory_name: cannot open shared object file: No such file or directory
új, nem a csomagkezelőn keresztül telepített programok vagy más disztribúcióhoz szánt programok telepítésekor. Ez azért fordul elő, mert a rendszer nem találja a könyvtárat. Miért nem találja meg és nem tölti be?
Több oka is van, általában egy könyvtárról van szó, ami:
A probléma megoldása során ezekből az okokból fogunk kiindulni, és megpróbáljuk megoldani őket.
Ezután nézzük meg a probléma megoldásának konkrét példáit az előző bekezdésben említett okok alapján.
Itt nincs semmi bonyolult, és minden teljesen egyértelmű - a könyvtár egyszerűen nincs jelen a rendszerben, ezért kapjuk ezt a hibát. Ezért meg kell keresnünk a könyvtárcsomagot egy csomagkezelő segítségével, és telepítenünk kell. Általában a könyvtárakat tartalmazó csomagokat ugyanúgy hívják, mint magukat a könyvtárakat lib
előtaggal.
Ha hiányzik a libfuse2.so
könyvtár, akkor Ubuntuban ezzel a paranccsal megtalálhatjuk:
$ sudo apt search libfuse2
Ezután már csak a telepítése van hátra:
$ sudo apt install libfuse2
Ha egy programot forrásból kell építenünk, akkor a fejlécfájlokat is telepítenünk kell:
$ sudo apt install libfuse-dev
És így van ez bármelyik könyvtár esetében. De ez nem mindig működik.
A gyakorlatban vannak olyan esetek, amikor a könyvtárat telepítették, de a hiba továbbra is fennáll, és nem teszi lehetővé, hogy a felhasználók normálisan interakcióba lépjenek a rendszerrel. Mi a teendő ilyen esetben? Először is ellenőrizze a Linux rendszerbetöltőjét, amely nem találja a könyvtárat. A keresést a /etc/ld.conf.d/
konfigurációs fájlokban megadott könyvtárakban kell elvégezni. Ezek általában a /usr/lib, /lib, /usr/lib64, /lib64
. Ha a könyvtár más könyvtárba van telepítve, akkor nyilvánvalóan ez a probléma gyökere.
A betöltő számára jelenleg elérhető könyvtárakat a következő paranccsal láthatjuk:
$ ldconfig -p
Keresse meg, hogy hol található a könyvtár a locate
parancs segítségével. Például minket a librtfreader.so
könyvtár érdekel:
$ locate librtfreader
Ha tudjuk a /opt/kingsoft/wps-office/office6/
helyét, akkor lehetővé kell tennünk, hogy a betöltőprogram felismerje a könyvtárat. A konfigurációs fájlba vagy az LD_LIBRARY_PATH
változóba beírjuk a /etc/ld.so.conf.d/
elérési utat:
export LD_LIBRARY_PATH=/opt/kingsoft/wps-office/office6/
Bármilyen könyvtárral telepíthetjük, amely a hibát előhívja. Választhatjuk a kevésbé bonyolult utat is: létrehozhatunk egy szimbolikus linket a megfelelő könyvtárhoz a megfelelő könyvtárban:
ln -s /opt/kingsoft/wps-office/office6/librtfreader.so /usr/lib/librtfreader.so
Ez általában akkor fordul elő, ha olyan disztribúcióhoz tartozó programokat használsz, amelyet nem telepítettél. Minden könyvtárnak van egy kiegészítő verziója, amely a .so
kiterjesztés után van kiírva. Például libav.so.1
. A verziószám minden alkalommal változik, amikor egy könyvtárat javítanak.
Gyakran előfordul, hogy az egyik disztribúcióban egy program egy könyvtárfüggőséggel épül, például libc .so.1
, egy másik disztribúcióban pedig csak libc.so.2
. A legtöbb esetben itt a különbségek kicsik, és a program a könyvtár második verzióján is futhat. Így egyszerűen létrehozhatunk egy szimbolikus linket hozzá.
Például nincs libusb-1.0.so.1
könyvtár. De van libusb-1.0.so.0.1
, és azt használhatjuk:
Ehhez egyszerűen létrehozunk egy szimbolikus linket a könyvtárhoz:
$ sudo ln -s /usr/lib/libusb-1.0.so.0.1 /usr/lib/libusb-1.0.so.1
Gyakran a program nem veszi észre a helyettesítést, és működni fog. Okos megoldásként próbáljuk megkeresni az interneten a könyvtár architektúránknak megfelelő verzióját, és helyezzük el a /usr/lib/
vagy /usr/lib64/
mappába. Ezt követően azonban kívánatos a gyorsítótár frissítése:
$ sudo ldconfig
Ha a probléma a fenti lépések után is fennáll, ajánlott a program vagy az operációs rendszer dokumentációjában részletesebb információt találni a szükséges könyvtárverziókról és azok telepítéséről.