Linuxi kasutajad puutuvad sageli kokku veaga, mis põhjustab jagatud raamatukogude laadimist
programmide käivitamisel, ning see on tuttav ka paljudele programmeerijatele ja kõigile, kes soovivad oma süsteemis tarkvara kompileerida. Sõna otseses mõttes tähendab see, et jagatud raamatukogude laadimisel on probleem.
Viga"error while loading shared libraries
" tähendab, et programmi või skripti käivitamisel ei suutnud operatsioonisüsteem leida ja laadida ühte või mitut raamatukogu, mis on selle programmi töötamiseks vajalikud. See on UNIX-taoliste operatsioonisüsteemide puhul tavaline probleem. Programmi kompileerimisel võib see viidata erinevatele välistele raamatukogudele, mis peaksid töö ajal olema kättesaadavad. Kui need raamatukogud puuduvad või ei ole kättesaadavad, tekib jagatud raamatukogude laadimisel viga.
Isegi kui te oma programme ei kompileeri, võib see viga ilmneda: directory_name: cannot open shared object file: No such file or directory
üsna sageli uute programmide installeerimisel, mis ei toimu paketihalduri kaudu või mõne teise distributsiooni jaoks mõeldud programmide installeerimisel. See tekib seetõttu, et süsteem ei leia raamatukogu. Miks seda ei leita ja ei saa laadida?
Mitmed põhjused, tavaliselt on tegemist raamatukoguga, mis:
Probleemi lahendamisel juhindume nendest põhjustest ja püüame neid lahendada.
Järgnevalt vaatleme konkreetseid näiteid selle probleemi lahendamiseks, mis põhinevad eelmises lõigus nimetatud põhjustel.
Siin ei ole midagi keerulist ja kõik on üsna selge - raamatukogu lihtsalt ei ole süsteemis olemas, mistõttu me saame selle vea. Seepärast peame me paketihalduri abil raamatukogu paketi üles leidma ja selle paigaldama. Tavaliselt kutsutakse raamatukogude pakette samamoodi nagu raamatukogusid endid eesliitega lib
.
Kui meil puudub libfuse2.so
raamatukogu, siis leiame selle Ubuntus selle käsuga:
$ sudo apt search libfuse2
Siis jääb üle ainult selle paigaldamine:
$ sudo apt install libfuse2
Kui teil on vaja programmi koostada lähtekoodist, siis tuleb paigaldada ka päisefailid:
$ sudo apt install libfuse-dev
Ja nii ka iga raamatukogu puhul. Kuid see ei toimi alati.
Praktikas on juhtumeid, kus raamatukogu on küll installeeritud, kuid viga püsib ja ei võimalda kasutajatel süsteemiga normaalselt suhelda. Mida sellisel juhul teha? Kõigepealt kontrollige Linuxi alglaadijat, mis ei leia raamatukogu. Otsingut tuleks teha konfiguratsioonifailides /etc/ld.conf.d/
määratud kataloogides. Reeglina on need /usr/lib, /lib, /usr/lib64, /lib64
. Kui raamatukogu on installeeritud teise kataloogi, on see ilmselt probleemi põhjus.
Saate vaadata, millised raamatukogud on hetkel laadijale kättesaadavad, kasutades käsku:
$ ldconfig -p
Leidke käsuga locate
, kus teie raamatukogu asub. Näiteks meid huvitab raamatukogu librtfreader.so:
$ locate librtfreader
Kui me teame, kus asub /opt/kingsoft/wps-office/office6/
, siis peame tegema võimalikuks, et laadur saaks selle raamatukogu tuvastada. Lisame tee /etc/ld.so.conf.d/
konfiguratsioonifaili või muutujasse LD_LIBRARY_PATH
:
export LD_LIBRARY_PATH=/opt/kingsoft/wps-office/office6/
Saate paigaldada mis tahes raamatukogu, mis kutsub viga. Võite valida ka lihtsama tee, luues õigesse kataloogi sümboolse lingi õigele raamatukogule:
ln -s /opt/kingsoft/wps-office/office6/librtfreader.so /usr/lib/librtfreader.so
See juhtub tavaliselt siis, kui kasutate sellise distributsiooni programme, mida te ei ole installeerinud. Igal raamatukogul on lisaversioon, mis kirjutatakse pärast .so
laiendit. Näiteks libav.so.1
. Versiooninumber muutub iga kord, kui raamatukogu parandatakse.
Sageli juhtub, et ühes distributsioonis on programm ehitatud koos raamatukogu sõltuvusega, näiteks libc .so.1
, ja teises distributsioonis on ainult libc.so.2
. Enamasti on erinevused siin väikesed ja programm võiks töötada ka teise raamatukogu versiooniga. Seega võime lihtsalt luua sellele sümboolse lingi.
Näiteks puudub raamatukogu libusb-1.0.so.1
. Kuid on olemas libusb-1.0.so.0.1
ja me võime seda kasutada:
Selleks loome lihtsalt sümboolse lingi raamatukogule:
$ sudo ln -s /usr/lib/libusb-1.0.so.0.1 /usr/lib/libusb-1.0.so.1
Sageli ei märka programm asendust ja töötab. Nutika lahendusena proovige internetist leida oma arhitektuurile sobiv raamatukogu versioon ja paigutage see kausta /usr/lib/
või /usr/lib64/
. Aga pärast seda on soovitav uuendada vahemälu:
$ sudo ldconfig
Kui probleem püsib ka pärast neid samme, on soovitatav lugeda programmi või operatsioonisüsteemi dokumentatsioonist täpsemat teavet vajalike raamatukogu versioonide ja nende paigaldamise kohta.