Care este diferența dintre fișierul .a și .so?

Din câte înțeleg sunt biblioteci, dar care este diferența dintre cele două?

Comentarii

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-o full 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ă.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *