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ẹ.