Je suis conscient que les objets partagés sous Linux utilisent "so numbers", à savoir que différentes versions d'un objet partagé ont des extensions différentes, par exemple:
example.so.1
example.so.2
Je comprends que l’idée est d’avoir deux fichiers distincts, de sorte que deux versions d’une bibliothèque puissent exister sur un système (par opposition à "DLL Hell" sous Windows). Je voudrais savoir comment cela fonctionne dans la pratique? Souvent, je vois example.so
est en fait un lien symbolique vers example.so.2
où .2
est la dernière version. Comment alors une application dépendant d'une ancienne version de l' example.so
identifie-t-elle correctement? Existe-t-il des règles concernant les numéros à utiliser? Ou est-ce simplement une convention? Est-il vrai que, contrairement à Windows où les fichiers binaires logiciels sont transférés entre systèmes, si un système a une version plus récente d'un objet partagé, il est automatiquement lié à l'ancienne version lors de la compilation à partir du source?
Je soupçonne que cela est lié à, ldconfig
mais je ne sais pas comment.