Pagsabot sa Gipaambit nga mga Libraries sa Linux


Sa pagprograma, ang usa ka librarya usa ka klase sa pre-compiled nga mga piraso sa code nga mahimong magamit pag-usab sa usa ka programa. Gipasimple sa mga librarya ang kinabuhi sa mga programmer, tungod kay naghatag sila og magamit nga mga gimbuhaton, rutina, klase, istruktura sa datos, ug uban pa (gisulat sa lain nga programmer), nga magamit nila sa ilang mga programa.

Pananglitan, kung nagtukod ka usa ka aplikasyon nga kinahanglan nga himuon ang mga operasyon sa matematika, dili nimo kinahanglan maghimo usa ka bag-ong function sa matematika alang niana, mahimo nimong gamiton ang mga naa na nga function sa mga librarya alang sa kana nga programming language.

Ang mga pananglitan sa mga librarya sa Linux naglakip sa libc (ang standard C library) o Glibc (GNU version sa standard C library), libcurl (multiprotocol file transfer library), libcrypt (library nga gigamit para sa encryption, hashing, ug encoding sa C), ug daghan pa. labaw pa.

Gisuportahan sa Linux ang duha ka klase sa mga librarya, nga mao ang:

  • Mga static nga librarya – gigapos sa usa ka programa nga static sa oras sa pag-compile.
  • Dynamic o shared library – gikarga kon ang usa ka programa gilusad ug gikarga sa memorya ug ang pagbugkos mahitabo sa panahon sa pagdagan.

Ang dinamiko o gipaambit nga mga librarya mahimong dugang nga kategorya sa:

  • Dynamically linked nga mga library – dinhi ang usa ka programa gisumpay sa shared library ug ang kernel mokarga sa library (kon wala kini sa memorya) sa dihang ipatuman.
  • Dynamically loaded nga mga library – ang programa hingpit nga nagkontrol pinaagi sa pagtawag sa mga function sa library.

Ang gipaambit nga mga librarya gihinganlan sa duha ka paagi: ang ngalan sa librarya (a.k.a soname) ug usa ka \filename (hingpit nga dalan paingon sa file nga nagtipig sa library code).

Pananglitan, ang soname sa libc mao ang libc.so.6: diin ang lib mao ang prefix, ang c usa ka deskriptibo nga ngalan, busa nagpasabot nga gipaambit nga butang, ug ang 6 mao ang bersyon. Ug ang filename niini mao ang: /lib64/libc.so.6. Timan-i nga ang soname sa tinuod usa ka simbolo nga sumpay sa filename.

Ang gipaambit nga mga librarya gikargahan sa ld.so (o ld.so.x) ug ld-linux.so (o ld-linux.so.x) nga mga programa, diin ang x mao ang bersyon. Sa Linux, ang /lib/ld-linux.so.x nangita ug nagkarga sa tanang shared library nga gigamit sa usa ka programa.

Ang usa ka programa mahimong motawag sa usa ka librarya gamit ang iyang librarya nga ngalan o filename, ug ang usa ka library path nagtipig og mga direktoryo diin ang mga librarya makita sa filesystem. Sa kasagaran, ang mga librarya nahimutang sa /usr/local/lib, /usr/local/lib64, /usr/lib ug /usr/lib64; Ang mga librarya sa pagsugod sa sistema anaa sa /lib ug /lib64. Ang mga programmer mahimo, bisan pa, mag-install sa mga librarya sa naandan nga mga lokasyon.

Ang agianan sa librarya mahimong mahubit sa /etc/ld.so.conf file nga mahimo nimong usbon gamit ang command-line editor.

# vi /etc/ld.so.conf 

Ang (mga) linya niini nga payl nagtudlo sa kernel sa pagkarga sa file sa /etc/ld.so.conf.d. Niining paagiha, ang mga tigmintinar sa pakete o mga programmer makadugang sa ilang naandang mga direktoryo sa librarya sa listahan sa pagpangita.

Kon imong tan-awon ang /etc/ld.so.conf.d nga direktoryo, imong makita ang .conf nga mga file alang sa pipila ka komon nga mga pakete (kernel, mysql, ug postgresql niini nga kaso):

# 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

Kung imong tan-awon ang mariadb-x86_64.conf, imong makita ang usa ka hingpit nga agianan sa mga librarya sa pakete.

# cat mariadb-x86_64.conf

/usr/lib64/mysql

Ang pamaagi sa ibabaw nagtakda sa agianan sa librarya nga permanente. Aron temporaryo kining ibutang, gamita ang LD_LIBRARY_PATH environment variable sa command line. Kung gusto nimo nga magpabilin nga permanente ang mga pagbag-o, unya idugang kini nga linya sa shell initialization file /etc/profile (global) o ~/.profile (user-specific).

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

Atong tan-awon karon kung unsaon pag-atubang ang gipaambit nga mga librarya. Aron makakuha og lista sa tanang shared library dependencies para sa binary file, mahimo nimong gamiton ang ldd utility. Ang output sa ldd anaa sa porma:

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

Kini nga sugo nagpakita sa tanang gipaambit nga mga dependency sa library para sa ls command.

# 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)

Tungod kay ang gipaambit nga mga librarya mahimong anaa sa daghang lain-laing mga direktoryo, ang pagpangita sa tanan niini nga mga direktoryo kung ang usa ka programa gilunsad mahimong dili epektibo: nga usa sa lagmit nga mga disbentaha sa dinamikong mga librarya. Busa ang usa ka mekanismo sa caching gigamit, nga gihimo sa programa ldconfig.

Sa kasagaran, ang ldconfig mobasa sa sulod sa /etc/ld.so.conf, maghimo sa angay nga simbolikong mga sumpay sa dinamikong link nga mga direktoryo, ug dayon mosulat ug cache ngadto sa /etc/ld.so.cache nga sayon gamiton sa ubang mga programa .

Importante kaayo kini ilabi na kung bag-o ka lang nag-install og bag-ong shared library o naghimo sa imong kaugalingon, o naghimo og bag-ong mga direktoryo sa library. Kinahanglan nimo nga ipadagan ang ldconfig nga mando aron ma-epekto ang mga pagbag-o.

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

Pagkahuman sa paghimo sa imong gipaambit nga librarya, kinahanglan nimo nga i-install kini. Mahimo nimong ibalhin kini sa bisan asa sa mga standard nga direktoryo nga gihisgutan sa ibabaw ug ipadagan ang ldconfig nga sugo.

Sa laing paagi, padagana ang mosunod nga sugo aron makahimo og simbolikong mga sumpay gikan sa soname ngadto sa filename:

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

Aron makasugod sa paghimo sa imong kaugalingon nga mga librarya, tan-awa kini nga giya gikan sa The Linux Documentation Project(TLDP).

Kana lang sa pagkakaron! Sa kini nga artikulo, gihatagan ka namon usa ka pasiuna sa mga librarya ug gipatin-aw ang gipaambit nga mga librarya, ug kung giunsa kini pagdumala sa Linux. Kung naa kay pangutana o dugang nga ideya nga ipaambit, gamita ang comment form sa ubos.