Nifhmu Libreriji Kondiviżi fil-Linux


Fl-ipprogrammar, librerija hija taħlita ta’ biċċiet ta’ kodiċi kkumpilati minn qabel li jistgħu jerġgħu jintużaw fi programm. Il-libreriji jissimplifikaw il-ħajja għall-programmaturi, fis-sens li jipprovdu funzjonijiet, rutini, klassijiet, strutturi tad-dejta, eċċ li jistgħu jerġgħu jintużaw (miktuba minn programmatur ieħor), li jistgħu jużaw fil-programmi tagħhom.

Pereżempju, jekk qed tibni applikazzjoni li teħtieġ li twettaq operazzjonijiet tal-matematika, m'għandekx għalfejn toħloq funzjoni matematika ġdida għal dan, tista 'sempliċement tuża funzjonijiet eżistenti fil-libreriji għal dik il-lingwa ta' programmar.

Eżempji ta’ libreriji fil-Linux jinkludu libc (il-librerija C standard) jew Glibc (verżjoni GNU tal-librerija C standard), libcurl (librerija ta’ trasferiment ta’ fajls multiprotokoll), libcrypt (librerija użata għall-kodifikazzjoni, hashing, u kodifikazzjoni f’C), u ħafna aktar.

Linux jappoġġja żewġ klassijiet ta 'libreriji, jiġifieri:

  • Libreriji statiċi – huma marbuta ma' programm b'mod statiku fil-ħin tal-kompilazzjoni.
  • Libreriji dinamiċi jew kondiviżi – huma mgħobbija meta programm jiġi mniedi u mgħobbi fil-memorja u l-irbit iseħħ fil-ħin tar-run.

Libreriji dinamiċi jew kondiviżi jistgħu jiġu kkategorizzati aktar fi:

  • Libreriji konnessi b'mod dinamiku - hawnhekk programm huwa konness mal-librerija kondiviża u l-kernel jgħabbi l-librerija (f'każ li ma tkunx fil-memorja) mal-eżekuzzjoni.
  • Libreriji mgħobbija b'mod dinamiku – il-programm jieħu kontroll sħiħ billi jsejjaħ funzjonijiet mal-librerija.

Libreriji kondiviżi jissemmew b'żewġ modi: l-isem tal-librerija (magħruf ukoll bħala soname) u \filename (mogħdija assoluta għall-fajl li jaħżen il-kodiċi tal-librerija).

Pereżempju, is-sonname għal libc huwa libc.so.6: fejn lib huwa l-prefiss, c huwa isem deskrittiv, għalhekk ifisser oġġett kondiviż, u 6 hija l-verżjoni. U l-isem tal-fajl tiegħu huwa: /lib64/libc.so.6. Innota li s-sonam fil-fatt huwa link simboliku għall-isem tal-fajl.

Libreriji kondiviżi huma mgħobbija minn programmi ld.so (jew ld.so.x) u ld-linux.so (jew ld-linux.so.x), fejn x hija l-verżjoni. Fil-Linux, /lib/ld-linux.so.x ifittex u jgħabbi l-libreriji kondiviżi kollha użati minn programm.

Programm jista’ jsejjaħ librerija billi juża l-isem tal-librerija jew l-isem tal-fajl tiegħu, u mogħdija tal-librerija taħżen direttorji fejn il-libreriji jistgħu jinstabu fis-sistema tal-fajls. B'mod awtomatiku, il-libreriji jinsabu f' /usr/local/lib, /usr/local/lib64, /usr/lib u /usr/lib64; libreriji tal-istartjar tas-sistema huma f'/lib u /lib64. Il-programmaturi jistgħu, madankollu, jinstallaw libreriji f'postijiet apposta.

Il-mogħdija tal-librerija tista' tiġi definita fil-fajl /etc/ld.so.conf li tista' teditja b'editur tal-linja tal-kmand.

# vi /etc/ld.so.conf 

Il-linja(i) f'dan il-fajl jagħtu struzzjonijiet lill-kernel biex jgħabbi l-fajl f'/etc/ld.so.conf.d. B'dan il-mod, dawk li jżommu l-pakketti jew il-programmaturi jistgħu jżidu d-direttorji tal-libreriji tad-dwana tagħhom mal-lista tat-tiftix.

Jekk tħares lejn id-direttorju /etc/ld.so.conf.d, tara fajls .conf għal xi pakketti komuni (kernel, mysql, u postgresql f'dan il-każ):

# 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

Jekk tagħti ħarsa lejn il-mariadb-x86_64.conf, se tara triq assoluta għall-libreriji tal-pakketti.

# cat mariadb-x86_64.conf

/usr/lib64/mysql

Il-metodu ta 'hawn fuq jistabbilixxi l-mogħdija tal-librerija b'mod permanenti. Biex issettjaha temporanjament, uża l-varjabbli ambjentali LD_LIBRARY_PATH fuq il-linja tal-kmand. Jekk trid iżżomm il-bidliet permanenti, imbagħad żid din il-linja fil-fajl tal-inizjalizzazzjoni tal-qoxra /etc/profile (globali) jew ~/.profile (speċifiku għall-utent).

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

Ejja issa nħarsu lejn kif nittrattaw il-libreriji kondiviżi. Biex tikseb lista tad-dipendenzi kollha tal-librerija kondiviża għal fajl binarju, tista 'tuża l-utilità ldd. L-output ta' ldd huwa fil-forma:

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

Dan il-kmand juri d-dipendenzi kollha tal-librerija kondiviża għall-kmand 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)

Minħabba li libreriji kondiviżi jistgħu jeżistu f'ħafna direttorji differenti, it-tiftix minn dawn id-direttorji kollha meta jitnieda programm ikun ferm ineffiċjenti: li huwa wieħed mill-iżvantaġġi probabbli tal-libreriji dinamiċi. Għalhekk mekkaniżmu ta 'caching huwa impjegat, imwettaq mill-programm ldconfig.

B'mod awtomatiku, ldconfig jaqra l-kontenut ta' /etc/ld.so.conf, joħloq il-links simboliċi xierqa fid-direttorji tal-links dinamiċi, u mbagħad jikteb cache f' /etc/ld.so.cache li mbagħad jintuża faċilment minn programmi oħra .

Dan huwa importanti ħafna speċjalment meta tkun għadek kif installajt libreriji kondiviżi ġodda jew ħloqt tiegħek, jew ħloqt direttorji tal-libreriji ġodda. Ikollok bżonn tħaddem il-kmand ldconfig biex taffettwa l-bidliet.

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

Wara li toħloq il-librerija kondiviża tiegħek, għandek bżonn tinstallaha. Tista' jew iċċaqlaqha f'xi wieħed mid-direttorji standard imsemmija hawn fuq u tmexxi l-kmand ldconfig.

Inkella, mexxi l-kmand li ġej biex toħloq links simboliċi mis-sonam għall-isem tal-fajl:

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

Biex tibda bil-ħolqien tal-libreriji tiegħek stess, iċċekkja din il-gwida minn The Linux Documentation Project (TLDP).

Dak kollu għalissa! F'dan l-artikolu, tajnikom introduzzjoni għal-libreriji u spjegajna libreriji kondiviżi, u kif timmaniġġjahom fil-Linux. Jekk għandek xi mistoqsijiet jew ideat addizzjonali x'taqsam, uża l-formola tal-kummenti hawn taħt.