Mokėjimo būdai Abuse

Ошибка klaida kraunant bendrąsias bibliotekas

21.02.2024, 22:45

"Linux" naudotojai dažnai susiduria su bendrųjų bibliotekų įkėlimo klaida, kai paleidžia programas, be to, ji pažįstama daugeliui programuotojų ir visiems, norintiems kompiliuoti programinę įrangą savo sistemoje. Tiesiogine prasme tai reiškia, kad įkeliant bendrąsias bibliotekas iškilo problema.

Daugiau apie klaidą Klaida įkeliant bendrąsias bibliotekas

Klaida"error while loading shared libraries" reiškia, kad paleidžiant programą ar scenarijų operacinė sistema negalėjo rasti ir įkelti vienos ar daugiau bibliotekų, kurios būtinos šiai programai veikti. Tai dažna UNIX tipo operacinių sistemų problema. Kai programa yra kompiliuojama, joje gali būti nuorodos į įvairias išorines bibliotekas, kurios turėtų būti prieinamos paleidimo metu. Jei šių bibliotekų trūksta arba jos neprieinamos, įkeliant bendrąsias bibliotekas įvyksta klaida.

Net jei programų nekompiliuojate, šią klaidą galite matyti gana dažnai, kai diegiant naujas programas ne per paketų tvarkytuvę arba kitam platinimui skirtas programas, gali būti pastebėta ši klaida: directory_name: cannot open shared object file: No such file or directory (katalogo_vardas: negalima atidaryti bendrojo objekto failo: Nėra tokio failo ar katalogo ). Ji atsiranda dėl to, kad sistema negali rasti bibliotekos. Kodėl jos negalima rasti ir įkelti?

Kelios priežastys, dažniausiai viskas susiveda į biblioteką, kuri:

  • nėra įdiegta sistemoje;
  • yra įdiegta, bet ne toje vietoje;
  • yra įdiegta teisingai, bet turi netinkamą versiją.

Spręsdami problemą vadovausimės šiomis priežastimis ir bandysime jas išspręsti.

Kaip ištaisyti bendrųjų bibliotekų įkėlimo klaidą?

Toliau panagrinėkime konkrečius šios problemos sprendimo pavyzdžius, remdamiesi ankstesnėje pastraipoje minėtomis priežastimis.

Biblioteka neįdiegta

Čia nėra nieko sudėtingo ir viskas visiškai aišku - biblioteka paprasčiausiai neįdiegta sistemoje, todėl ir gauname šią klaidą. Todėl turime surasti bibliotekos paketą naudodamiesi paketų tvarkykle ir jį įdiegti. Paprastai paketai su bibliotekomis vadinami taip pat, kaip ir pačios bibliotekos, su priešdėliu lib.

Jei mums trūksta bibliotekos libfuse2.so, "Ubuntu" sistemoje ją galime rasti naudodami šią komandą:

$ sudo apt search libfuse2

Tada belieka tik ją įdiegti:

$ sudo apt install libfuse2

Kai jums reikia sukurti programą iš pirminio kodo, taip pat turėsite įdiegti antraštinius failus:

$ sudo apt install libfuse-dev

Taip pat ir bet kuriai kitai bibliotekai. Tačiau tai ne visada pavyksta.

Biblioteka yra netinkamame kataloge

Praktikoje pasitaiko atvejų, kai biblioteka įdiegiama, tačiau klaida išlieka ir neleidžia naudotojams normaliai bendrauti su sistema. Ką tokiu atveju daryti? Pirmiausia patikrinkite, ar "Linux" įkroviklis neranda bibliotekos. Paiešką reikia atlikti kataloguose, nurodytuose konfigūracijos failuose /etc/ld.conf.d/. Paprastai tai yra /usr/lib, /lib, /usr/lib64, /lib64. Jei biblioteka įdiegta kitame kataloge, akivaizdu, kad tai yra problemos priežastis.

Kokios bibliotekos šiuo metu prieinamos įkrovikliui, galite pamatyti naudodami komandą:

$ ldconfig -p

Raskite, kur yra jūsų biblioteka, naudodami komandą locate. Pavyzdžiui, mus domina biblioteka librtfreader.so:

$ locate librtfreader

Kai žinome bibliotekos /opt/kingsoft/wps-office/office6/ buvimo vietą, turime padaryti taip, kad įkroviklis galėtų aptikti šią biblioteką. Kelią /etc/ld.so.conf.d/ įrašome į konfigūracijos failą arba į kintamąjį LD_LIBRARY_PATH:

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

Galite įdiegti su bet kuria biblioteka, kuri sukelia klaidą. Taip pat galite rinktis ne tokį sudėtingą kelią - sukurti simbolinę nuorodą į tinkamą biblioteką tinkamame kataloge:

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

Neteisinga bibliotekos versija

Paprastai taip nutinka, kai naudojamos programos, skirtos platinimui, kurio nesate įdiegę. Kiekviena biblioteka turi papildomą versiją, kuri rašoma po plėtiniu .so. Pavyzdžiui, libav.so.1. Versijos numeris keičiasi, kai biblioteka pataisoma.

Dažnai pasitaiko, kad viename platinime programa sukurta su priklausoma biblioteka, pavyzdžiui, libc .so.1, o kitame platinime yra tik libc.so.2. Daugeliu atvejų skirtumai čia yra nedideli ir programa gali veikti su antrąja bibliotekos versija. Taigi galime tiesiog sukurti simbolinę nuorodą į ją.

Pavyzdžiui, bibliotekos libusb-1.0.so.1 nėra. Tačiau yra libusb-1.0.so.0.1, ir ją galime naudoti:

Norėdami tai padaryti, tiesiog sukuriame simbolinę nuorodą į biblioteką:

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

Dažnai programa nepastebės pakeitimo ir veiks. Protingas sprendimas - pabandykite internete susirasti savo architektūrai tinkamą bibliotekos versiją ir įdėkite ją į /usr/lib/ arba /usr/lib64/ aplanką. Tačiau po to pageidautina atnaujinti talpyklą:

$ sudo ldconfig

Jei po šių veiksmų problema išlieka, rekomenduojama kreiptis į programos arba operacinės sistemos dokumentaciją, kad gautumėte išsamesnės informacijos apie reikiamas bibliotekų versijas ir kaip jas įdiegti.