Loye Awọn ile-ikawe Pipin ni Lainos
Ninu siseto, ile-ikawe jẹ akojọpọ awọn koodu ti a ṣajọ tẹlẹ ti o le tun lo ninu eto kan. Awọn ile-ikawe jẹ igbesi aye ni irọrun fun awọn olutẹpa eto, ni pe wọn pese awọn iṣẹ atunṣe, awọn ipa ọna, awọn kilasi, awọn eto data ati bẹbẹ lọ (ti o kọwe nipasẹ oluṣeto eto miiran), eyiti wọn le lo ninu awọn eto wọn.
Fun apeere, ti o ba n kọ ohun elo kan ti o nilo lati ṣe awọn iṣẹ iṣiro, iwọ ko ni lati ṣẹda iṣẹ iṣiro tuntun fun iyẹn, o le lo awọn iṣẹ to wa tẹlẹ ni awọn ile-ikawe fun ede siseto naa.
Awọn apẹẹrẹ ti awọn ile ikawe ni Linux pẹlu libc (ile-ikawe C ti o jẹwọn) tabi glibc (ẹya GNU ti ile-ikawe C ti o jẹwọn), libcurl (ile-ikawe gbigbe faili pupọproprocol), libcrypt (ile-ikawe ti a lo fun fifi ẹnọ kọ nkan, hashing, ati aiyipada ni C) ati ọpọlọpọ diẹ sii .
Linux ṣe atilẹyin awọn kilasi meji ti awọn ile-ikawe, eyun:
- Awọn ile-ikawe aimi - ni a sopọ mọ eto ni iṣiro ni akoko ikojọ.
- Dynamic tabi awọn ile ikawe ti a pin - ti kojọpọ nigbati o ba ṣe ifilọlẹ eto kan ti o rù sinu iranti ati isopọ waye ni akoko ṣiṣe.
Dynamic tabi awọn ikawe ti a pin le ni tito lẹtọ si:
- Awọn ile-ikawe ti o ni asopọ ni agbara - nibi eto kan ni asopọ pẹlu ile-ikawe ti a pin ati ekuro n ko ikawe naa (ti o ba jẹ pe ko si ni iranti) lori ipaniyan.
- Awọn ikawe ti a kojọpọ ni agbara - eto naa gba iṣakoso ni kikun nipasẹ pipe awọn iṣẹ pẹlu ile-ikawe.
A darukọ awọn ile ikawe ti a pin ni ọna meji: orukọ ile-ikawe (a.k.a soname) ati\"orukọ orukọ '' (ọna pipe si faili eyiti o tọju koodu ikawe).
Fun apẹẹrẹ, orukọ ọmọ fun libc ni libc.so.6: nibiti lib jẹ ṣaju, c jẹ orukọ asọye, nitorinaa tumọ si ohun ti a pin, ati pe 6 ni ẹya naa. Ati orukọ orukọ rẹ ni:/libib64/libc.so.6. Akiyesi pe orukọ ọmọkunrin jẹ ọna asopọ aami si orukọ faili.
Awọn ile ikawe ti a pin jẹ ti kojọpọ nipasẹ awọn eto ld.so (tabi ld.so.x) ati awọn eto ld-linux.so (tabi ld-linux.so.x), nibiti x jẹ ẹya naa. Ni Lainos, /lib/ld-linux.so.x awọn iwadii ati awọn ẹrù gbogbo awọn ikawe ti a pin ti eto kan lo.
Eto kan le pe ile-ikawe kan nipa lilo orukọ ile-ikawe rẹ tabi orukọ faili, ati ọna ikawe awọn ile itaja awọn itọsọna nibiti a le rii awọn ikawe ni eto faili. Nipa aiyipada, awọn ile-ikawe wa ni/usr/agbegbe/lib,/usr/agbegbe/lib64,/usr/lib ati/usr/lib64; awọn ile-ikawe ibẹrẹ eto wa ni/lib ati/lib64. Awọn eto le, sibẹsibẹ, fi awọn ikawe sori ẹrọ ni awọn ipo aṣa.
O le ṣalaye ọna ikawe ni faili /etc/ld.so.conf eyiti o le ṣatunkọ pẹlu olootu laini aṣẹ kan.
# vi /etc/ld.so.conf
Awọn laini (s) ninu faili yii paṣẹ fun ekuro lati gbe faili ni /etc/ld.so.conf.d. Ni ọna yii, awọn olutọju package tabi awọn olutọsọna eto le ṣafikun awọn ilana ikawe aṣa wọn si atokọ wiwa.
Ti o ba wo inu itọsọna /etc/ld.so.conf.d, iwọ yoo wo awọn faili .conf fun awọn idii ti o wọpọ (ekuro, mysql ati postgresql ninu ọran yii):
# ls /etc/ld.so.conf.d kernel-2.6.32-358.18.1.el6.x86_64.conf kernel-2.6.32-696.1.1.el6.x86_64.conf mariadb-x86_64.conf kernel-2.6.32-642.6.2.el6.x86_64.conf kernel-2.6.32-696.6.3.el6.x86_64.conf postgresql-pgdg-libs.conf
Ti o ba wo wo mariadb-x86_64.conf, iwọ yoo wo ọna pipe si awọn ile ikawe ti package.
# cat mariadb-x86_64.conf /usr/lib64/mysql
Ọna ti o wa loke ṣeto ọna ile-ikawe ni pipe. Lati ṣeto rẹ fun igba diẹ, lo iyipada ayika LD_LIBRARY_PATH lori laini aṣẹ. Ti o ba fẹ lati pa awọn ayipada mọ ni igbagbogbo, lẹhinna ṣafikun laini yii ni faili ibẹrẹ ikarahun/ati be be lo/profaili (agbaye) tabi ~/.profile (oluṣe olumulo).
# export LD_LIBRARY_PATH=/path/to/library/file
Jẹ ki a wo bayi bi a ṣe le ṣe pẹlu awọn ile ikawe ti a pin. Lati gba atokọ ti gbogbo awọn igbẹkẹle ile-ikawe pinpin fun faili alakomeji, o le lo iwulo ldd. Iṣelọpọ ti ldd wa ni fọọmu:
library name => filename (some hexadecimal value) OR filename (some hexadecimal value) #this is shown when library name can’t be read
Aṣẹ yii fihan gbogbo awọn igbẹkẹle ikawe ti a pin fun aṣẹ ls.
# ldd /usr/bin/ls OR # ldd /bin/ls
linux-vdso.so.1 => (0x00007ffebf9c2000) libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003b71e00000) librt.so.1 => /lib64/librt.so.1 (0x0000003b71600000) libcap.so.2 => /lib64/libcap.so.2 (0x0000003b76a00000) libacl.so.1 => /lib64/libacl.so.1 (0x0000003b75e00000) libc.so.6 => /lib64/libc.so.6 (0x0000003b70600000) libdl.so.2 => /lib64/libdl.so.2 (0x0000003b70a00000) /lib64/ld-linux-x86-64.so.2 (0x0000561abfc09000) libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003b70e00000) libattr.so.1 => /lib64/libattr.so.1 (0x0000003b75600000)
Nitori awọn ile ikawe ti a pin le wa ni ọpọlọpọ awọn ilana oriṣiriṣi oriṣiriṣi, wiwa nipasẹ gbogbo awọn ilana wọnyi nigbati o ba ṣe ifilọlẹ eto yoo jẹ aisekokari pupọ: eyiti o jẹ ọkan ninu awọn ailagbara ti o ṣeeṣe ti awọn ile ikawe ti o ni agbara. Nitorinaa siseto ti caching oojọ, ṣe nipasẹ eto kan ldconfig.
Nipa aiyipada, ldconfig ka akoonu ti /etc/ld.so.conf, ṣẹda awọn ọna asopọ ami apẹẹrẹ ti o yẹ ninu awọn ilana ọna asopọ agbara, ati lẹhinna kọ kaṣe kan si /etc/ld.so.cache eyiti o jẹ lẹhinna awọn iṣọrọ lo nipasẹ awọn eto miiran. .
Eyi ṣe pataki pupọ paapaa nigbati o ba ti ṣafikun awọn ile-ikawe tuntun ti a pin tabi ṣẹda tirẹ, tabi ṣẹda awọn ilana ikawe tuntun. O nilo lati ṣiṣe aṣẹ ldconfig lati ṣe awọn ayipada naa.
# ldconfig OR # ldconfig -v #shows files and directories it works with
Lẹhin ṣiṣẹda ile-ikawe ti o pin, o nilo lati fi sii. O le boya gbe e sinu eyikeyi awọn ilana ilana ti a mẹnuba loke, ati ṣiṣe aṣẹ ldconfig.
Ni omiiran, ṣiṣe aṣẹ atẹle lati ṣẹda awọn ọna asopọ aami lati orukọ ọmọ si orukọ faili:
# ldconfig -n /path/to/your/shared/libraries
Lati bẹrẹ pẹlu ṣiṣẹda awọn ile-ikawe tirẹ, ṣayẹwo itọsọna yii lati Project Linux Documentation Project (TLDP).
Iyẹn ni gbogbo fun bayi! Ninu nkan yii, a fun ọ ni ifihan si awọn ile ikawe, ṣalaye awọn ile ikawe ti a pin ati bii o ṣe le ṣakoso wọn ni Linux. Ti o ba ni awọn ibeere eyikeyi tabi awọn imọran afikun lati pin, lo fọọmu asọye ni isalẹ.