![Mulinete Instagram care nu funcționează - Iată soluțiile!](/f/121b48c0591d871eb5c7748a4df28dd8.jpg?width=100&height=100)
În programare, o bibliotecă este un sortiment de piese de cod precompilate care pot fi refolosite într-un program. Bibliotecile simplifică viața programatorilor, prin faptul că oferă funcții reutilizabile, rutine, clase, structuri de date și așa mai departe (scrise de un alt programator), pe care le pot folosi în programele lor.
De exemplu, dacă creați o aplicație care trebuie să efectueze operații matematice, nu trebuie să faceți acest lucru creați o nouă funcție matematică pentru aceasta, puteți utiliza pur și simplu funcțiile existente în biblioteci pentru acea programare limba.
Exemple de biblioteci în Linux includ libc (biblioteca standard C) sau glibc (Versiunea GNU a bibliotecii C standard), libcurl (biblioteca de transfer de fișiere multiprotocol), libcrypt (bibliotecă utilizată pentru criptare, hash și codificare în C) și multe altele.
Linux acceptă două clase de biblioteci și anume:
Bibliotecile dinamice sau partajate pot fi clasificate în continuare în:
Bibliotecile partajate sunt denumite în două moduri: numele bibliotecii (alias soname) și un „nume de fișier” (calea absolută către fișier care stochează codul bibliotecii).
De exemplu, soname pentru libc este libc.so.6: Unde lib este prefixul, c este un nume descriptiv, deci înseamnă obiect partajat și 6 este versiunea. Și numele său de fișier este: /lib64/libc.so.6. Rețineți că soname este de fapt o legătură simbolică către numele fișierului.
Bibliotecile partajate sunt încărcate de ld.so (sau ld.so.x) și ld-linux.so (sau ld-linux.so.x) programe, unde X este versiunea. În Linux, /lib/ld-linux.so.x caută și încarcă toate bibliotecile partajate utilizate de un program.
Un program poate apela o bibliotecă folosind numele sau numele fișierului acesteia, iar o cale de bibliotecă stochează directoare unde bibliotecile pot fi găsite în sistemul de fișiere. În mod implicit, bibliotecile sunt localizate în /usr/local/lib, /usr/local/lib64, /usr/lib și /usr/lib64; bibliotecile de pornire a sistemului sunt în /lib și /lib64. Cu toate acestea, programatorii pot instala biblioteci în locații personalizate.
Calea bibliotecii poate fi definită în /etc/ld.so.conf fișier pe care îl puteți edita cu un editor de linie de comandă.
# vi /etc/ld.so.conf
Linia (rândurile) din acest fișier instruiește nucleul să încarce fișierul în /etc/ld.so.conf.d. În acest fel, întreținătorii de pachete sau programatorii își pot adăuga directoarele bibliotecii personalizate în lista de căutare.
Dacă te uiți în /etc/ld.so.conf.d director, veți vedea .conf fișiere pentru unele pachete comune (kernel, mysql și postgresql în acest caz):
# 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.
Dacă aruncați o privire la mariadb-x86_64.conf, veți vedea o cale absolută către bibliotecile pachetelor.
# cat mariadb-x86_64.conf /usr/lib64/mysql.
Metoda de mai sus setează calea bibliotecii permanent. Pentru a-l seta temporar, utilizați LD_LIBRARY_PATH variabilă de mediu pe linia de comandă. Dacă doriți să păstrați modificările permanente, adăugați această linie în fișierul de inițializare a shell-ului /etc/profile (global) sau ~ / .profil (specific utilizatorului).
# export LD_LIBRARY_PATH = / cale / către / bibliotecă / fișier.
Să vedem acum cum să ne ocupăm de bibliotecile partajate. Pentru a obține o listă a tuturor dependențelor bibliotecii partajate pentru un fișier binar, puteți utiliza fișierul utilitate ldd. Rezultatul ldd este sub forma:
nume bibliotecă => nume fișier (o valoare hexazecimală) SAU. nume de fișier (o anumită valoare hexazecimală) #acest lucru este afișat atunci când numele bibliotecii nu poate fi citit.
Această comandă arată toate dependențele bibliotecii partajate pentru Comand.
# ldd / usr / bin / ls. SAU. # 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. deci.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. deci.1 (0x0000003b75600000)
Deoarece bibliotecile partajate pot exista în mai multe directoare diferite, căutând prin toate aceste directoare când lansarea unui program ar fi foarte ineficient: acesta este unul dintre dezavantajele probabile ale bibliotecilor dinamice. Prin urmare, este utilizat un mecanism de stocare în cache, efectuat de un program ldconfig.
În mod implicit, ldconfig citește conținutul /etc/ld.so.conf, creează legăturile simbolice corespunzătoare în directoarele de legături dinamice și apoi scrie un cache în /etc/ld.so.cache care este apoi ușor de utilizat de alte programe.
Acest lucru este foarte important mai ales atunci când tocmai ați instalat noi biblioteci partajate sau ați creat propriile dvs. sau ați creat directoare de biblioteci noi. Trebuie să fugi ldconfig comanda pentru a efectua modificările.
# ldconfig. SAU. # ldconfig -v # arată fișierele și directoarele cu care funcționează.
După crearea bibliotecii partajate, trebuie să o instalați. Puteți să îl mutați în oricare dintre directoarele standard menționate mai sus și să îl rulați ldconfig comanda.
Alternativ, rulați următoarea comandă pentru a crea legături simbolice din soname la numele fișierului:
# ldconfig -n / path / to / your / shared / libraries.
Pentru a începe să creați propriile biblioteci, consultați acest ghid de la Proiectul de documentare Linux (TLDP).
Asta este tot pentru acum! În acest articol, v-am oferit o introducere în biblioteci, am explicat bibliotecile partajate și cum să le gestionați în Linux. Dacă aveți întrebări sau idei suplimentare de partajat, utilizați formularul de comentarii de mai jos.