Quelle est la différence entre les fichiers .a et .so?

Pour autant que je sache, ce sont des bibliothèques, mais quelle est la différence entre les deux?

Commentaires

Réponse

A .a Le fichier est une bibliothèque statique, tandis quun fichier .so est une bibliothèque dobjets partagés (dynamique) similaire à une DLL sous Windows. Il existe des informations détaillées sur les différences entre les deux sur cette page .

Les commentaires

  • .a ne peuvent être inclus que dans le cadre dun programme pendant la compilation. .so ' peuvent être " importés " pendant le chargement dun programme.
  • Que signifie .a?
  • @hfrmobile Le a signifie archive – une bibliothèque statique est une collection de fichiers objets créés à laide de lutilitaire ar. Plus dinformations ici

Réponse

En guise de suivi, un fichier .a est une archive « ar ». Tout comme une archive tar, il stocke .o ou un objet fichiers, ce qui leur permet dêtre extraits de larchive et liés à un programme, entre autres. Vous pouvez utiliser ar pour stocker dautres fichiers si vous le souhaitez.

Vous pouvez obtenir une liste des membres dun fichier ar avec le paramètre -t, par exemple:

ar -t /usr/lib/libc.a 

Un fichier .so est un fichier « objet partagé », et dispose de beaucoup plus dinformations disponibles pour léditeur de liens afin que les membres puissent être liés à un programme de chargement aussi rapidement que possible.

Par exemple, essayez:

objdump -T /lib/libc-2.11.1.so 

(ou quelle que soit la version de libc.so que vous avez dans votre répertoire / lib.) Notez quun fichier .so peut aussi contenir simplement un script de lien le dirigeant pour trouver le fichier ailleurs, ou utilisez autre chose.

Fait intéressant, un fichier .so peut aussi être un programme à part entière. Par exemple, essayez dexécuter /lib/libc.so.6 . (Malheureusement, cette dernière partie ne semble pas fonctionner sur des systèmes plus modernes. Non pas que ce soit une grande perte.)

Commentaires

  • Faute de frappe . vous voulez écrire ar -t /usr/lib/libc.a. En fait, le - ne semble pas ' nécessaire dans ce cas. De plus, /lib/libc.so.6. imprime juste une sortie. Je ne ' ne sais pas si je lappellerais un full fledged program.
  • Cest ' est un programme à part entière dans le sens où il a un symbole principal à rechercher par exec.
  • Vous pouvez également exécuter ldd sur .so ' s, et il vous montrera quelles autres bibliothèques il utilise. Static reviendra avec un message indiquant que ' nest pas une bibliothèque dynamique.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *