Linux-käyttäjät törmäävät usein jaettujen kirjastojen latausvirheeseen
ohjelmia suorittaessaan, ja se on tuttu myös monille ohjelmoijille ja kaikille, jotka haluavat kääntää ohjelmistoja järjestelmäänsä. Kirjaimellisesti se tarkoittaa, että jaettujen kirjastojen lataamisessa on ongelma.
Virhe"virhe jaettujen kirjastojen lataamisen aikana
" tarkoittaa, että ohjelmaa tai komentosarjaa suoritettaessa käyttöjärjestelmä ei löytänyt ja ladannut yhtä tai useampaa kirjastoa, jotka ovat välttämättömiä, jotta tämä ohjelma toimisi. Tämä on yleinen ongelma UNIX-tyyppisissä käyttöjärjestelmissä. Kun ohjelma käännetään, se voi viitata erilaisiin ulkoisiin kirjastoihin, joiden pitäisi olla käytettävissä ajon aikana. Jos nämä kirjastot puuttuvat tai eivät ole käytettävissä, jaettujen kirjastojen lataamisessa tapahtuu virhe.
Vaikka et kääntäisikään ohjelmia, saatat nähdä tämän virheen: directory_name: cannot open shared object file: No such file or directory
melko usein, kun asennat uusia ohjelmia, joita ei ole asennettu paketinhallinnan kautta, tai toiselle jakelulle tarkoitettuja ohjelmia. Se johtuu siitä, että järjestelmä ei löydä kirjastoa. Miksi sitä ei löydy ja ladata?
Useita syitä, yleensä kyse on kirjastosta, joka:
Ongelmaa ratkaistessamme otamme huomioon nämä syyt ja yritämme ratkaista ne.
Tarkastellaan seuraavaksi konkreettisia esimerkkejä tämän ongelman ratkaisemisesta edellisessä kappaleessa mainittujen syiden perusteella.
Tässä ei ole mitään monimutkaista ja kaikki on melko selvää - kirjastoa ei yksinkertaisesti ole järjestelmässä, minkä vuoksi saamme tämän virheen. Siksi meidän on löydettävä kirjastopaketti paketinhallinnan avulla ja asennettava se. Yleensä kirjastoja sisältäviä paketteja kutsutaan samoin kuin itse kirjastoja etuliitteellä lib
.
Jos meiltä puuttuu libfuse2.so-kirjasto
, voimme löytää sen Ubuntussa tällä komennolla:
$ sudo apt search libfuse2
Sitten ei ole muuta tehtävissä kuin asentaa se:
$ sudo apt install libfuse2
Kun sinun täytyy rakentaa ohjelma lähdekoodista, sinun täytyy asentaa myös otsikkotiedostot:
$ sudo apt install libfuse-dev
Ja niin minkä tahansa kirjaston kohdalla. Mutta tämä ei aina toimi.
Käytännössä on tapauksia, joissa kirjasto on asennettu, mutta virhe jatkuu eikä käyttäjä voi toimia normaalisti järjestelmän kanssa. Mitä tällaisessa tapauksessa tehdään? Tarkista ensin Linuxin käynnistyslatausohjelma, joka ei löydä kirjastoa. Haku on suoritettava määritystiedostoissa /etc/ld.conf.d/
määritetyistä hakemistoista. Yleensä nämä ovat /usr/lib, /lib, /usr/lib64, /lib64
. Jos kirjasto on asennettu eri hakemistoon, tämä on ilmeisesti ongelman ydin.
Voit nähdä, mitkä kirjastot ovat tällä hetkellä lataajan käytettävissä komennolla:
$ ldconfig -p
Etsi kirjastosi sijainti locate-komennolla
. Olemme esimerkiksi kiinnostuneita kirjastosta librtfreader.so:
$ locate librtfreader
Kun tiedämme sijainnin /opt/kingsoft/wps-office/office6/
, meidän on mahdollistettava se, että lataaja havaitsee kirjaston. Lisäämme polun /etc/ld.so.conf.d/
asetustiedostoon tai muuttujaan LD_LIBRARY_PATH
:
export LD_LIBRARY_PATH=/opt/kingsoft/wps-office/office6/
Voit asentaa millä tahansa kirjastolla, joka kutsuu virheeseen. Voit myös valita yksinkertaisemman reitin luomalla symbolisen linkin oikeaan kirjastoon oikeaan hakemistoon:
ln -s /opt/kingsoft/wps-office/office6/librtfreader.so /usr/lib/librtfreader.so
Tämä tapahtuu yleensä silloin, kun käytät sellaisen jakelun ohjelmia, jota sinulla ei ole asennettuna. Jokaisella kirjastolla on lisäversio, joka kirjoitetaan .so-päätteen
jälkeen. Esimerkiksi libav.so.1
. Versionumero muuttuu aina, kun kirjastoa korjataan.
Usein käy niin, että yhdessä jakelussa ohjelma on rakennettu kirjastoriippuvuuden kanssa, esimerkiksi libc .so.1
, ja toisessa jakelussa on vain libc.so.2
. Useimmiten erot ovat tässä pieniä ja ohjelma voi toimia kirjaston toisella versiolla. Voimme siis yksinkertaisesti luoda symbolisen linkin siihen.
Esimerkiksi libusb-1.0.so.1-kirjastoa
ei ole olemassa. Mutta on olemassa libusb-1.0.so.0.0.1
, ja voimme käyttää sitä:
Tätä varten luomme yksinkertaisesti symbolisen linkin kirjastoon:
$ sudo ln -s /usr/lib/libusb-1.0.so.0.1 /usr/lib/libusb-1.0.so.1
Usein ohjelma ei huomaa vaihtoa ja toimii. Älykkäänä ratkaisuna yritä etsiä Internetistä arkkitehtuurillesi sopiva versio kirjastosta ja sijoita se /usr/lib/
tai /usr/lib64/-kansioon
. Sen jälkeen on kuitenkin suotavaa päivittää välimuisti:
$ sudo ldconfig
Jos ongelma jatkuu näiden vaiheiden jälkeen, on suositeltavaa tutustua ohjelman tai käyttöjärjestelmän dokumentaatioon, josta saat tarkempia tietoja tarvittavista kirjastoversioista ja niiden asentamisesta.