Din câte înțeleg sunt biblioteci, dar care este diferența dintre cele două?
Comentarii
- Postare asociată – Care este ' diferența dintre biblioteca .so, .la și .a fișiere?
Răspuns
A .a
fișierul este o bibliotecă statică, în timp ce un fișier .so
este o bibliotecă de obiecte partajate (dinamică) similară cu o DLL pe Windows. Există câteva informații detaliate despre diferențele dintre cele două pe această pagină .
Comentarii
-
.a
poate fi inclus numai ca parte a unui program în timpul compilării..so
' s poate fi " importat " în timp ce se încarcă un program. - ce înseamnă .a?
- @hfrmobile The a înseamnă arhivă – o bibliotecă statică este o colecție de fișiere obiect create folosind utilitarul
ar
. Mai multe informații aici
Răspuns
Ca urmare, un fișier .a este o arhivă „ar”. Spre deosebire de o arhivă tar, stochează .o sau obiectul fișiere, permițându-le să fie scoase din arhivă și conectate la un program, printre altele. Puteți utiliza ar pentru a stoca alte fișiere, dacă doriți.
Puteți obține o listă a membrilor unui fișier ar cu parametrul -t, de exemplu:
ar -t /usr/lib/libc.a
Un fișier .so este un fișier „obiect partajat” și are mai multe informații disponibile pentru linker, astfel încât membrii să poată fi conectați la un program de încărcare cât mai repede posibil.
De exemplu, încercați:
objdump -T /lib/libc-2.11.1.so
(sau orice versiune a libc.so pe care o aveți în directorul / lib.) Rețineți că un fișier .so ar putea conține, de asemenea, un script linker care îl direcționează către fișier în altă parte sau utilizați altceva.
Interesant este că un fișier .so poate fi, de asemenea, un program complet. De exemplu, încercarea de a rula /lib/libc.so.6 . (Din păcate, această ultimă parte nu pare să funcționeze pe sisteme mai moderne. Nu că „este o mare pierdere.)
Comentarii
- Typo . vrei să scrii
ar -t /usr/lib/libc.a
. De fapt,-
nu ' pare a fi necesar în acest caz. De asemenea,/lib/libc.so.6.
tipărește doar o ieșire. Nu ' nu știu dacă aș numi-ofull fledged program
. - Este ' este un program complet în sensul că are un simbol principal pentru executare.
- De asemenea, puteți rula
ldd
pe .so ' s și vă va arăta ce alte biblioteci folosește. Static va reveni cu un mesaj care spune că ' nu este o bibliotecă dinamică.