Que sont les fichiers .a et .so?

428

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 création / exécution d'une application?

Dunc
la source
116
une bibliothèque est archive et d' autres est sHared objet
Shiplu Mokaddim

Réponses:

484

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 à une bibliothèque .a est qu'ils sont liés pendant l'exécution, c'est-à-dire après la création de votre option .o file -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.

Feuillu
la source
2
l'un de ces éléments concerne-t-il pic(code indépendant de la position)?
transang
213

.a sont des bibliothèques statiques. Si vous utilisez du code stocké à l'intérieur, il est extrait d'eux et intégré à votre propre binaire. Dans Visual Studio, il s'agirait de fichiers .lib.

.so sont des bibliothèques dynamiques. Si vous utilisez du code stocké à l'intérieur, il n'est pas pris et intégré dans 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 sera ajouté / chargé lors de l'exécution. Dans Visual Studio / Windows, il s'agirait de fichiers .dll (avec de petits fichiers .lib contenant des informations de liaison).

Mario
la source
salut existe-t-il une option pour décompiler le fichier .so dans le code c / c ++.?
Jishant
@Ancee: regardez cette question: stackoverflow.com/questions/205059/is-there-ac-decompiler
Paul Wintz
Un petit .libfichier pour .dllest appelé une bibliothèque d'importation.
Programmeur orienté argent
13

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

Pour faire un port, vous aurez besoin du code source qui a été compilé pour les créer, ou des fichiers équivalents sur votre machine AIX.

gbulmer
la source
Comment créer mon application pour utiliser des fichiers .so?
Dunc
Il existe de nombreuses excellentes références pour créer les deux types de bibliothèques et les lier à celles-ci sur le Web. Google est ton ami.
David Pointer
@Dunc - Il y a deux façons. Avez-vous un makefile? Habituellement, la commande qui assemble l'ensemble du programme (et donc appelle l'éditeur de liens) spécifie les endroits où rechercher les fichiers de bibliothèque avec -L / dir / dir1 /.../ et peut également nommer les bibliothèques explicitement avec -lname. Vous constaterez que le nom réel est libname.a ou libname.so. L'éditeur de liens peut alors déterminer quoi faire s'il s'agit d'un programme raisonnablement normal. Mais vous avez toujours le problème de créer ou de trouver le fichier .so. Avez-vous du code source pour le construire, ou une bibliothèque AIX?
gbulmer
10

Ils sont utilisés dans l'étape de liaison. .ales fichiers sont liés statiquement et les .sofichiers sont en quelque sorte liés, de sorte que la bibliothèque est nécessaire chaque fois que vous exécutez l'exe.

Vous pouvez trouver où ils sont stockés en consultant l'un des répertoires lib ... /usr/libet en /libavoir la plupart, et il y a aussi la LIBRARY_PATHvariable d'environnement.

Mat
la source