Linux пайдаланушылары бағдарламаларды іске қосу кезінде error loading shared libraries
қатесіне жиі кездеседі және бұл көптеген бағдарламашыларға және өз жүйесінде бағдарламалық жасақтаманы құрастырғысы келетіндердің барлығына таныс. Ағылшын тілінен сөзбе-сөз аударғанда, бұл ортақ кітапхананы жүктеу кезінде ақаулық орын алғанын білдіреді.
« error while loading shared libraries
» қатесі бағдарламаны немесе сценарийді іске қосқан кезде операциялық жүйе бағдарламаның жұмыс істеуі үшін қажетті бір немесе бірнеше кітапхананы тауып, жүктей алмағанын білдіреді. Бұл UNIX тәрізді операциялық жүйелерде жиі кездесетін мәселе. Бағдарлама құрастырылған кезде, ол орындалу уақытында қолжетімді болуы керек әртүрлі сыртқы кітапханаларға сілтеме жасай алады. Бұл кітапханалар жоқ немесе қолжетімсіз болса, ортақ кітапханаларды жүктеу кезінде қате орын алады.
Бағдарламаларыңызды құрастырмасаңыз да, мына қатені көруіңіз мүмкін: directory_name: cannot open shared object file: No such file or directory
. Бұл жүйе кітапхананы таба алмағандықтан орын алады. Неліктен оны табу және жүктеу мүмкін емес?
Бірнеше себептер бар, әдетте бәрі кітапханаға байланысты:
Мәселені шешу барысында біз осы себептерді басшылыққа алып, оларды шешуге тырысамыз.
Әрі қарай, біз алдыңғы абзацта айтылған себептерге негізделген бұл мәселені шешудің нақты мысалдарын қарастырамыз.
Мұнда күрделі ештеңе жоқ және бәрі өте түсінікті - кітапхана жүйеде жоқ, сондықтан біз мұндай қатені аламыз. Сондықтан, мұны шешу үшін бума менеджері арқылы кітапхана бумасын тауып, оны орнату керек. Әдетте, кітапханалары бар бумалар lib
префиксі бар кітапханалардың өздерімен бірдей аталады.
Егер бізде libfuse2.so
кітапханасы жоқ болса, біз оны Ubuntu жүйесінде мына пәрмен арқылы таба аламыз:
$ sudo apt search libfuse2
Содан кейін оны орнату ғана қалады:
$ sudo apt install libfuse2
Бағдарламаны көзден құрастыру қажет болғанда, тақырып файлдарын орнату керек болады:
$ sudo apt install libfuse-dev
Кез келген кітапхана үшін. Бірақ бұл әрқашан көмектеспейді.
Іс жүзінде кітапхана орнатылған жағдайлар бар, бірақ қате сақталады және пайдаланушыларға жүйемен қалыпты әрекеттесуге мүмкіндік бермейді. Бұл жағдайда не істеу керек? Алдымен кітапхананы таба алмайтын Linux жүктеушісін тексеріңіз. Іздеу /etc/ld.conf.d/
конфигурация файлдарында көрсетілген каталогтарда орындалуы керек. Әдетте, бұл /usr/lib, /lib, /usr/lib64, /lib64
. Кітапхана басқа каталогта орнатылған болса, бұл мәселенің түпкі себебі екені анық.
Пәрменді пайдаланып жүктеушіге қазіргі уақытта қандай кітапханалар бар екенін көре аласыз:
$ ldconfig -p
Сіз кітапхананың қай жерде locate
табу пәрменін пайдалана аласыз. Мысалы, бізді librtfreader.so
кітапханасы қызықтырады:
$ locate librtfreader
/opt/kingsoft/wps-office/office6/
орнын білгенде, жүктеуші кітапхананы анықтай алатынына көз жеткізуіміз керек. /etc/ld.so.conf.d/
жолын конфигурация файлына немесе LD_LIBRARY_PATH
айнымалысына қосыңыз:
export LD_LIBRARY_PATH=/opt/kingsoft/wps-office/office6/
Қатені тудыратын кез келген кітапханамен орнатуға болады. Сіз сондай-ақ күрделі емес жолды таңдай аласыз - дұрыс каталогта қалаған кітапханаға символдық сілтеме жасаңыз:
ln -s /opt/kingsoft/wps-office/office6/librtfreader.so /usr/lib/librtfreader.so
Бұл әдетте сізде орнатылмаған тарату үшін бағдарламаларды пайдаланған кезде орын алады. Әрбір кітапханада .so
кеңейтімінен кейін жазылатын қосымша нұсқасы бар. Мысалы, libav.so.1
. Кітапхана түзетілген сайын нұсқа нөмірі өзгереді.
Жағдай жиі бір дистрибутивте кітапханаға тәуелділігі бар бағдарламаны құрастырғанда туындайды, мысалы, libc.so.1
, ал басқасында тек libc.so.2
бар. Айырмашылықтар әдетте бұл жерде аз және бағдарлама кітапхананың екінші нұсқасында жұмыс істей алады. Сондықтан біз оған символдық сілтеме жасай аламыз.
Мысалы, libusb-1.0.so.1
кітапханасы жоқ. Бірақ libusb-1.0.so.0.1
бар және біз оны пайдалана аламыз:
Ол үшін кітапханаға символдық сілтеме жасаңыз:
$ sudo ln -s /usr/lib/libusb-1.0.so.0.1 /usr/lib/libusb-1.0.so.1
Көбінесе бағдарлама ауыстыруды байқамайды және жұмыс істейді. Ақылға қонымды шешім ретінде архитектура үшін кітапхананың қажетті нұсқасын Интернеттен табуға тырысыңыз және оны /usr/lib/
немесе /usr/lib64/
қалтасына орналастырыңыз. Бірақ содан кейін кэшті жаңарту ұсынылады:
$ sudo ldconfig
Егер бұл қадамдар мәселені шешпесе, қажетті кітапхана нұсқалары және оларды орнату жолы туралы толығырақ ақпарат алу үшін бағдарламаны немесе операциялық жүйе құжаттамасын қарауды ұсынамыз.