Betalingsmåter Abuse

Ошибка-feil under innlasting av delte biblioteker

21.02.2024, 22:45

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.

Mer om feilen error while loading shared libraries

Feilen"error while loading shared libraries" 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

  • ikke er installert på systemet;
  • er installert, men på feil sted;
  • er riktig installert, men har feil versjon.

Når vi løser problemet, vil vi bli ledet av disse grunnene og prøve å løse dem.

Hvordan fikse feilfeilen ved lasting av delte biblioteker?

La oss deretter vurdere spesifikke eksempler på å løse dette problemet basert på årsakene nevnt i forrige avsnitt.

Biblioteket er ikke installert

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.

Biblioteket ligger i feil katalog

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

Ugyldig biblioteksversjon

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.