Betalningsmetoder Abuse

Ошибка fel vid inläsning av delade bibliotek

21.02.2024, 22:45

Linux-användare stöter ofta på felet error loading shared libraries när de kör program, och det är också bekant för många programmerare och alla som vill kompilera programvara på sitt system. Bokstavligen betyder det att det finns ett problem när du laddar delade bibliotek.

Mer om felet error while loading shared libraries

Felet"error while loading shared libraries" innebär att när ett program eller skript körs kunde operativsystemet inte hitta och ladda ett eller flera bibliotek som är nödvändiga för att programmet ska fungera. Detta är ett vanligt problem i UNIX-liknande operativsystem. När ett program kompileras kan det hänvisa till olika externa bibliotek som ska vara tillgängliga vid körning. Om dessa bibliotek saknas eller inte är tillgängliga uppstår ett fel vid laddning av delade bibliotek.

Även om du inte kompilerar dina program kan du se det här felet: directory_name: cannot open shared object file: No such file or directory ganska ofta när du installerar nya program som inte går via pakethanteraren eller program som är avsedda för en annan distribution. Det inträffar för att systemet inte kan hitta biblioteket. Varför kan det inte hittas och laddas?

Det finns flera anledningar, men oftast handlar det om ett bibliotek som:

  • inte är installerat på systemet;
  • är installerat, men på fel plats;
  • är korrekt installerat men har fel version.

När vi löser problemet kommer vi att vägledas av dessa skäl och försöka lösa dem.

Hur åtgärdar jag felet fel vid laddning av delade bibliotek?

Låt oss sedan överväga specifika exempel på att lösa detta problem baserat på de skäl som nämns i föregående stycke.

Biblioteket är inte installerat

Det finns inget komplicerat här och allt är ganska tydligt - biblioteket finns helt enkelt inte i systemet, det är därför vi får det här felet. Det är därför vi måste hitta bibliotekspaketet med hjälp av en pakethanterare och installera det. Vanligtvis kallas paket med bibliotek på samma sätt som biblioteken själva med prefixet lib.

Om vi saknar biblioteket libfuse2.so kan vi hitta det i Ubuntu med det här kommandot:

$ sudo apt search libfuse2

Då är det bara att installera det:

$ sudo apt install libfuse2

När du ska bygga ett program från källkod måste du också installera header-filerna:

$ sudo apt install libfuse-dev

Och så för alla bibliotek. Men det är inte alltid det fungerar.

Biblioteket finns i fel katalog

I praktiken finns det fall där biblioteket är installerat, men felet kvarstår och gör att användarna inte kan interagera normalt med systemet. Vad ska man göra i ett sådant fall? Kontrollera först och främst Linux boot loader som inte kan hitta biblioteket. Sökningen bör utföras i de kataloger som anges i konfigurationsfilerna /etc/ld.conf.d/. Som regel är dessa /usr/lib, /lib, /usr/lib64, /lib64. Om biblioteket är installerat i en annan katalog är detta uppenbarligen roten till problemet.

Du kan se vilka bibliotek som för närvarande är tillgängliga för laddaren med hjälp av kommandot:

$ ldconfig -p

Hitta var ditt bibliotek finns med hjälp av kommandot locate. Vi är t.ex. intresserade av biblioteket librtfreader.so:

$ locate librtfreader

När vi vet var /opt/kingsoft/wps-office/office6/ finns måste vi göra det möjligt för laddaren att upptäcka biblioteket. Vi lägger till sökvägen /etc/ld.so.conf.d/ i konfigurationsfilen eller i variabeln LD_LIBRARY_PATH:

export LD_LIBRARY_PATH=/opt/kingsoft/wps-office/office6/

Du kan installera med alla bibliotek som ger upphov till felet. Du kan också ta den mindre komplicerade vägen genom att skapa en symbolisk länk till rätt bibliotek i rätt katalog:

ln -s /opt/kingsoft/wps-office/office6/librtfreader.so /usr/lib/librtfreader.so

Ogiltig biblioteksversion

Detta händer vanligtvis när du använder program för en distribution som du inte har installerat. Varje bibliotek har en extra version, som skrivs efter .so-tillägget. Till exempel libav.so.1. Versionsnumret ändras när ett bibliotek patchar.

Det händer ofta att ett program i en distribution är byggt med ett biblioteksberoende, t.ex. libc.so .1, och i en annan distribution finns bara libc.so .2. I de flesta fall är skillnaderna små och programmet kan köras med den andra versionen av biblioteket. Så vi kan helt enkelt skapa en symbolisk länk till den.

Det finns till exempel inget libusb-1.0.so.1-bibliotek. Men det finns libusb-1.0.so.0.1, och det kan vi använda:

För att göra detta skapar vi helt enkelt en symbolisk länk till biblioteket:

$ sudo ln -s /usr/lib/libusb-1.0.so.0.1 /usr/lib/libusb-1.0.so.1

Ofta kommer programmet inte att märka substitutionen och kommer att fungera. Som en smart lösning kan du försöka hitta rätt version av biblioteket på Internet för din arkitektur och placera den i mappen /usr/lib/ eller /usr/lib64/. Men efter det är det önskvärt att uppdatera cacheminnet:

$ sudo ldconfig

Om problemet kvarstår efter dessa steg rekommenderar vi att du läser dokumentationen för programmet eller operativsystemet för mer detaljerad information om vilka biblioteksversioner som krävs och hur du installerar dem.