web-dev-qa-db-fra.com

Que sont les fichiers .a et .so?

J'essaie actuellement de porter une application C vers AIX et je suis confus. Que sont les fichiers .a et .so et comment sont-ils utilisés lors de la construction/exécution d'une application?

389
Dunc

Les bibliothèques d’archives (.a) sont liées statiquement, c’est-à-dire lorsque vous compilez votre programme avec l’option -c dans gcc. Donc, s'il y a un changement dans la bibliothèque, vous devez compiler et reconstruire votre code.

L’avantage de .so (objet partagé) par rapport à la bibliothèque .a est qu’elles sont liées au moment de l’exécution, c’est-à-dire après la création de votre option .o de fichier .o dans gcc. Donc, s'il y a un changement dans le fichier .so, vous n'avez pas besoin de recompiler votre programme principal. Mais assurez-vous que votre programme principal est lié au nouveau fichier .so avec la commande ln.

Cela vous aidera à créer les fichiers .so. http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

J'espère que cela t'aides.

440
Leafy

.a sont des bibliothèques statiques. Si vous utilisez le code stocké à l'intérieur, il est pris à partir de celui-ci et intégré à votre propre binaire. Dans Visual Studio, il s’agit de fichiers .lib.

.so sont des bibliothèques dynamiques. Si vous utilisez du code stocké à l'intérieur de celui-ci, il n'est pas pris et intégré à votre propre binaire. Au lieu de cela, il est simplement référencé, donc le binaire dépendra d'eux et le code du fichier so est ajouté/chargé au moment de l'exécution. Dans Visual Studio/Windows, il s’agit de fichiers .dll (avec de petits fichiers .lib contenant des informations de liaison).

196
Mario

Les fichiers .a sont généralement des bibliothèques qui sont statiquement liées (ou plus exactement des archives), et
. sont donc des bibliothèques liées dynamiquement.

Pour faire un port, vous aurez besoin du code source compilé pour les créer, ou de fichiers équivalents sur votre ordinateur AIX.

10
gbulmer

Ils sont utilisés dans la phase de liaison. Les fichiers .a sont liés statiquement et les fichiers .so sont en quelque sorte liés, de sorte que la bibliothèque est nécessaire chaque fois que vous exécutez l'exécutable.

Vous pouvez trouver où ils sont stockés en consultant l'un des répertoires lib ... /usr/lib et /lib en ont la plupart, et il existe également la variable d'environnement LIBRARY_PATH.

8
Matt

Wikipedia est une source décente pour cette information.

Pour en savoir plus sur les fichiers de bibliothèque statiques tels que .a read Static libarary

Pour en savoir plus sur les fichiers de bibliothèque partagés tels que .so read Library_ (computing) #Shared_libraries Sur cette page, vous trouverez également des informations utiles dans la dénomination de fichier section.

1
user3731622