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.