web-dev-qa-db-fra.com

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

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

70
Erik B

UNE .a le fichier est une bibliothèque statique, tandis qu'un .so le fichier est une bibliothèque d'objets (dynamique) partagée semblable à une DLL sous Windows. Il y a des informations détaillées sur les différences entre les deux sur cette page.

55
ajk

Par la suite, un fichier .a est une archive "ar". À la différence d'une archive tar, il stocke des fichiers .o ou objet, ce qui leur permet d'être extraits de l'archive et liés, entre autres, à un programme. Vous pouvez utiliser ar pour stocker d'autres fichiers si vous le souhaitez.

Vous pouvez obtenir une liste des membres d'un 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 d'informations 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 n'importe quelle version de libc.so que vous avez dans votre répertoire/lib.) Notez qu'un fichier .so peut aussi simplement contenir un script de l'éditeur de liens le dirigeant pour trouver le fichier ailleurs, ou utiliser autre chose.

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

29
Hack Saw