web-dev-qa-db-fra.com

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

J'essaie de compiler une bibliothèque tierce (sous Linux) et je vois qu'elle génère des fichiers libsomething.a J'ai mes autres bibliothèques qui sont des fichiers .so

Mais il semble que même .a est une bibliothèque partagée et peut être utilisé comme une lib .so

Y a-t-il donc une différence entre les deux? ou ils sont identiques avec une convention de dénomination différente.

21
rajshenoy

Mais il semble que même .a soit une bibliothèque partagée

Non, c'est une bibliothèque statique.

et peut être utilisé comme une lib .so

Si vous voulez y faire un lien, alors oui. Mais vous ne pouvez pas dlopen () un fichier .a que vous pourriez faire avec un fichier .so.

Vous pouvez toujours demander à notre vieil ami Oncle G de répondre à vos questions.

19
user529758

UNE .a le fichier est un bibliothèque statique, tandis qu'un .so le fichier est un bibliothèque dynamique d'objets partagés similaire à un DLL sous Windows.

UNE .a peut inclure en tant que partie d'un programme pendant la compilation & .so peut importé, tandis qu'un programme se charge.

28
gks

Lorsque vous établissez un lien avec le *.a, le code de la bibliothèque est inclus dans l'exécutable lui-même et l'exécutable peut être exécuté sans nécessiter le *.a fichier présent. Lorsque vous établissez un lien avec le *.so, ce n'est pas le cas et le *.so le fichier doit être présent lors de l'exécution.

16
William Pursell