Linux-brukere støter ofte på feilen error loading shared libraries
når de kjører programmer, og den er også kjent for mange programmerere og alle som ønsker å kompilere programvare på systemet sitt. Bokstavelig talt betyr det at det er et problem under innlasting av delte biblioteker.
Feilen"error while loading shared lib
raries" betyr at operativsystemet ikke kunne finne og laste inn ett eller flere biblioteker som er nødvendige for at programmet skal fungere, når du kjører et program eller skript. Dette er et vanlig problem i UNIX-lignende operativsystemer. Når et program kompileres, kan det henvise til ulike eksterne biblioteker som skal være tilgjengelige ved kjøring. Hvis disse bibliotekene mangler eller ikke er tilgjengelige, oppstår det en feil under innlasting av delte biblioteker.
Selv om du ikke kompilerer programmene dine, kan du se denne feilen: directory_name: cannot open shared object file: No such file or directory
ganske ofte når du installerer nye programmer som ikke er installert via pakkebehandleren, eller programmer som er beregnet på en annen distribusjon. Det oppstår fordi systemet ikke finner biblioteket. Hvorfor kan det ikke bli funnet og lastet inn?
Det kan være flere grunner, men vanligvis handler det om et bibliotek som
Når vi løser problemet, vil vi bli ledet av disse grunnene og prøve å løse dem.
La oss deretter vurdere spesifikke eksempler på å løse dette problemet basert på årsakene nevnt i forrige avsnitt.
Det er ikke noe komplisert her, og alt er ganske klart - biblioteket er rett og slett ikke til stede i systemet, det er derfor vi får denne feilen. Derfor må vi finne bibliotekspakken ved hjelp av en pakkebehandler og installere den. Vanligvis kalles pakker med biblioteker det samme som bibliotekene selv med prefikset lib
.
Hvis vi mangler biblioteket libfuse2.so
, kan vi finne det i Ubuntu med denne kommandoen:
$ sudo apt search libfuse2
Da gjenstår det bare å installere det:
$ sudo apt install libfuse2
Når du skal bygge et program fra kildekode, må du også installere header-filene:
$ sudo apt install libfuse-dev
Og det samme gjelder for alle biblioteker. Men dette fungerer ikke alltid.
I praksis hender det at biblioteket er installert, men at feilen vedvarer og gjør at brukerne ikke kan samhandle normalt med systemet. Hva skal man gjøre i et slikt tilfelle? Først og fremst må du sjekke Linux-oppstartslasteren som ikke finner biblioteket. Søket bør utføres i katalogene som er angitt i konfigurasjonsfilene /etc/ld.conf.d/
. Disse er som regel /usr/lib, /lib, /usr/lib64, /lib64
. Hvis biblioteket er installert i en annen katalog, er dette åpenbart roten til problemet.
Du kan se hvilke biblioteker som for øyeblikket er tilgjengelige for innlasteren ved hjelp av kommandoen:
$ ldconfig -p
Finn ut hvor biblioteket ditt befinner seg ved hjelp av kommandoen locate
. Vi er for eksempel interessert i biblioteket librtfreader.so:
$ locate librtfreader
Når vi vet hvor /opt/kingsoft/wps-office/office6/
befinner seg, må vi gjøre det mulig for innlasteren å oppdage biblioteket. Vi legger til stien /etc/ld.so.conf.d/
i konfigurasjonsfilen eller i LD_LIBRARY_PATH-variabelen
:
export LD_LIBRARY_PATH=/opt/kingsoft/wps-office/office6/
Du kan installere med et hvilket som helst bibliotek som påkaller feilen. Du kan også gå den mindre kompliserte veien ved å opprette en symbolsk lenke til riktig bibliotek i riktig katalog:
ln -s /opt/kingsoft/wps-office/office6/librtfreader.so /usr/lib/librtfreader.so
Dette skjer vanligvis når du bruker programmer for en distribusjon som du ikke har installert. Hvert bibliotek har en ekstra versjon, som skrives etter .so-utvidelsen
. For eksempel libav.so.1.
Versjonsnummeret endres hver gang et bibliotek oppdateres.
Det hender ofte at et program i én distribusjon er bygget med en biblioteksavhengighet, for eksempel libc.so .1
, mens det i en annen distribusjon bare finnes libc. so.2.
I de fleste tilfeller er forskjellene her små, og programmet kan kjøre på den andre versjonen av biblioteket. Så vi kan ganske enkelt opprette en symbolsk lenke til den.
Det finnes for eksempel ikke noe libusb-1.0.so.1-bibliotek
. Men det finnes libusb-1.0.so.0.1
, og det kan vi bruke:
Det gjør vi ved å opprette en symbolsk lenke til biblioteket:
$ sudo ln -s /usr/lib/libusb-1.0.so.0.1 /usr/lib/libusb-1.0.so.1
Ofte vil programmet ikke legge merke til substitusjonen og vil fungere. En smart løsning er å prøve å finne den riktige versjonen av biblioteket på Internett for din arkitektur og plassere den i mappen /usr/lib/
eller /usr/lib64/
. Men etter det er det ønskelig å oppdatere hurtigbufferen:
$ sudo ldconfig
Hvis problemet vedvarer etter disse trinnene, anbefaler vi at du leser dokumentasjonen til programmet eller operativsystemet for å få mer detaljert informasjon om hvilke biblioteksversjoner som kreves, og hvordan du installerer dem.