Ịghọta ọba akwụkwọ ndị ekekọrịtara na Linux


N'ime mmemme, ụlọ akwụkwọ ọbá akwụkwọ bụ ụdị nke koodu achịkọtara tupu oge eruo nke enwere ike ijikwa ya na mmemme. Ọbá akwụkwọ na-eme ka ndụ dị mfe maka ndị mmemme, n'ihi na ha na-enye ọrụ ndị a pụrụ iji mee ihe, usoro ihe omume, klas, nhazi data, na ihe ndị ọzọ (nke onye mmemme ọzọ dere), nke ha nwere ike iji na mmemme ha.

Dịka ọmụmaatụ, ọ bụrụ na ị na-ewu ngwa chọrọ ịrụ ọrụ mgbakọ na mwepụ, ịgaghị emepụta ọrụ mgbakọ na mwepụ ọhụrụ maka nke ahụ, ị nwere ike iji naanị ọrụ dị na ụlọ akwụkwọ maka asụsụ mmemme ahụ.

Ihe atụ nke ọba akwụkwọ na Linux gụnyere libc (ọbá akwụkwọ ọkọlọtọ C) ma ọ bụ Glibc (ụdị GNU nke ọbá akwụkwọ ọkọlọtọ C), libcurl (ọbá akwụkwọ na-ebufe faịlụ multiprotocol), libcrypt (ọbá akwụkwọ eji ezoro ezo, hashing, na ntinye na C), na ọtụtụ. Ọzọ.

Linux na-akwado klaasị abụọ nke ọba akwụkwọ, ya bụ:

  • Ọbá akwụkwọ ndị kwụ ọtọ – na-ejikọta ya na mmemme n'oge a na-achịkọta.
  • Ọbá akwụkwọ na-agbanwe agbanwe ma ọ bụ nkekọrịta - a na-ebunye mgbe ewepụtara mmemme wee tinye ya n'ime ebe nchekwa yana njikọ na-apụta n'oge agba ọsọ.

Ọbá akwụkwọ dị ike ma ọ bụ nkekọrịta nwere ike ịhakwa n'ime:

  • Ọbá akwụkwọ ejikọtaghị ọnụ - ebe a na-ejikọta mmemme na ọba akwụkwọ nkekọrịta na kernel na-ebu ụlọ ọba akwụkwọ (ọ bụrụ na ọ bụghị na ebe nchekwa) mgbe a ga-egbu ya.
  • Ọbá akwụkwọ ndị ebujuru n'ụzọ zuru ezu – ihe omume a na-ejikwa ya site n'ịkpọ ọrụ na ọba akwụkwọ.

A na-akpọ ọba akwụkwọ ndị e kekọrịtara aha n'ụzọ abụọ: aha ọba akwụkwọ (aka soname) na aha faịlụ (ụzọ zuru oke maka faịlụ nke na-echekwa koodu ọba akwụkwọ).

Dịka ọmụmaatụ, aha aha maka libc bụ libc.so.6: ebe lib bụ prefix, c bụ aha nkọwa, ya mere ọ pụtara ihe ekekọrịtara, na 6 bụ ụdị. Aha faịlụ ya bụ: /lib64/libc.so.6. Rịba ama na soname bụ n'ezie njikọ ihe atụ na aha faịlụ ahụ.

A na-eju ụlọ ọba akwụkwọ nkekọrịta site na mmemme ld.so (ma ọ bụ ld.so.x) na ld-linux.so (ma ọ bụ ld-linux.so.x), ebe x bụ ụdị. Na Linux, /lib/ld-linux.so.x na-achọ ma na-ebunye ọba akwụkwọ niile nke mmemme na-eji.

Mmemme nwere ike ịkpọ ọbá akwụkwọ na-eji aha ọba akwụkwọ ma ọ bụ aha faịlụ ya, yana ụzọ ọba akwụkwọ na-echekwa akwụkwọ ndekọ aha ebe enwere ike ịhụ ụlọ akwụkwọ n'ime sistemụ faịlụ. Site na ndabara, ọba akwụkwọ dị na /usr/local/lib, /usr/local/lib64, /usr/lib na /usr/lib64; ọba akwụkwọ mmalite sistemụ dị na /lib na /lib64. Ndị mmemme nwere ike, agbanyeghị, wunye ọba akwụkwọ n'ebe ahaziri ahazi.

Enwere ike kọwapụta ụzọ ọba akwụkwọ na /etc/ld.so.conf faịlụ nke ị nwere ike dezie site na ndezi ahịrị iwu.

# vi /etc/ld.so.conf 

Ahịrị(s) dị na faịlụ a na-akụziri kernel ka ọ buru faịlụ na /etc/ld.so.conf.d. N'ụzọ dị otú a, ndị na-elekọta ngwugwu ma ọ bụ ndị na-eme mmemme nwere ike itinye akwụkwọ ndekọ aha ụlọ akwụkwọ omenala ha na listi ọchụchọ.

Ọ bụrụ na i leba anya na ndekọ ndekọ /etc/ld.so.conf.d, ị ga-ahụ faịlụ .conf maka ụfọdụ ngwugwu nkịtị (kernel, mysql, na postgresql na nke a):

# 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

Ọ bụrụ na ị lelee mariadb-x86_64.conf, ị ga-ahụ ụzọ zuru oke na ọba akwụkwọ ngwugwu.

# cat mariadb-x86_64.conf

/usr/lib64/mysql

Usoro dị n'elu na-esetịpụ ụzọ ọba akwụkwọ ahụ kpamkpam. Iji tọọ ya nwa oge, jiri LD_LIBRARY_PATH mgbanwe gburugburu n'ahịrị iwu. Ọ bụrụ na ịchọrọ idowe mgbanwe ndị ahụ na-adịgide adịgide, tinyezie ahịrị a na faịlụ mbido shei /etc/profile (global) ma ọ bụ ~/.profile (onye ọrụ-kpọmkwem).

# export LD_LIBRARY_PATH=/path/to/library/file

Ka anyị leba anya ugbu a ka anyị ga-esi mesoo ụlọ akwụkwọ ndị na-ekekọrịta ihe. Iji nweta ndepụta ndabere ọbá akwụkwọ niile ekekọrịtara maka faịlụ ọnụọgụ abụọ, ịnwere ike iji ldd utility. Mpụta ldd dị n'ụdị:

library name =>  filename (some hexadecimal value)
OR
filename (some hexadecimal value)  #this is shown when library name can’t be read

Iwu a na-egosi ndabere ọbá akwụkwọ niile nkekọrịta maka iwu 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)

N'ihi na ọba akwụkwọ nkekọrịta nwere ike ịdị n'ọtụtụ akwụkwọ ndekọ aha dị iche iche, ịchọgharị akwụkwọ ndekọ aha ndị a niile mgbe ewepụtara mmemme ga-abụ nke na-adịghị arụ ọrụ nke ukwuu: nke bụ otu n'ime ọghọm dị n'ọbá akwụkwọ dị ike. Ya mere, a na-eji usoro caching arụ ọrụ, nke mmemme ldconfig na-arụ.

Site na ndabara, ldconfig na-agụ ọdịnaya nke /etc/ld.so.conf, mepụta njikọ ihe atụ kwesịrị ekwesị na akwụkwọ ndekọ aha njikọ siri ike, wee dee cache na /etc/ld.so.cache nke mmemme ndị ọzọ na-eji ngwa ngwa. .

Nke a dị ezigbo mkpa karịsịa mgbe ị rụnyere ọba akwụkwọ ọhụrụ ekekọrịtara ma ọ bụ mepụta nke gị, ma ọ bụ mepụta akwụkwọ ndekọ aha ọbá akwụkwọ ọhụrụ. Ịkwesịrị ịme iwu ldconfig iji mee mgbanwe ndị ahụ.

# ldconfig
OR
# ldconfig -v 	#shows files and directories it works with

Mgbe ịmepụtara ọbá akwụkwọ nkekọrịta, ịkwesịrị ịwụnye ya. Ị nwere ike bugharịa ya n'ime akwụkwọ ndekọ aha ọ bụla a kpọtụrụ aha n'elu wee mee iwu ldconfig.

N'aka nke ọzọ, gbaa iwu a ka ịmepụta njikọ ihe atụ site na aha aha na aha faịlụ:

# ldconfig -n /path/to/your/shared/libraries

Iji malite ịmepụta ọba akwụkwọ nke gị, lelee ntuziaka a sitere na Linux Documentation Project(TLDP).

Nke ahụ bụ ihe niile ugbu a! N'edemede a, anyị nyere gị mmalite nke ọba akwụkwọ ma kọwaa ọba akwụkwọ na-ekekọrịta, yana otu esi ejikwa ha na Linux. Ọ bụrụ na ị nwere ajụjụ ọ bụla ma ọ bụ echiche ndị ọzọ ị ga-ekekọrịta, jiri ụdị nkọwa n'okpuru.