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.
Felet"error while loading shared lib
raries" 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:
När vi löser problemet kommer vi att vägledas av dessa skäl och försöka lösa dem.
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.
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.
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
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.