Je pense que vous avez écrit les filnames dans l'ordre inverse de la façon dont il est normalement affiché, vous auriez 3 fichiers
libctest.so.1.0 (library file)
libctest.so.1 -> libctest.so.1.0 (symlink to the libctest.so.1.0 file)
libctest.so -> libctest.so.1 (symlink to the libctest.so.1 symlink
Il est un système de versioning.
Une édition/installation particulière d'une bibliothèque a un nom de fichier complet, par ex. libctest.so.1.0
, incorporé dans cette bibliothèque est le SONAME, un nom logique de la bibliothèque, par ex. libctest.so.1
qui est également utilisé comme lien symbolique vers le fichier réel.
Lors de la liaison d'un exécutable, la bibliothèque SONAME est ajoutée à l'exécutable. Ainsi, au moment de l'exécution, l'exécutable recherchera un nom de fichier de libctest.so.1
. La convention consiste à faire en sorte que le SONAME de la bibliothèque reste le même tant qu'il est rétrocompatible, et de le changer lorsque des changements d'ABI incompatibles vers l'arrière sont introduits. Et comme vous le dites, l'éditeur de liens recherchera lib*.so
lorsque vous effectuerez la liaison.
De cette manière, les exécutables (ou autres bibliothèques) liés à libctest.so.1
peuvent rester inchangés lorsque libctest
est mis à niveau. Ainsi, lorsque vous pourriez avoir libctest version 1.1 est publiée, ces fichiers:
libctest.so.1.1
libctest.so.1 -> libctest.so.1.1
libctest.so -> libctest.so.1
Exécutables toujours essayer de trouver libctest.so.1 et peut donc rester inchangé lorsque la bibliothèque est mise à niveau. La bibliothèque doit être écrite de sorte qu'elle soit rétrocompatible pour que cela fonctionne dans la pratique.
Si vous libérez une nouvelle bibliothèque incompatible, la convention est de changer le SONAME de cette bibliothèque, de sorte que vous finissez avec, par ex.
libctest.so.2.0
libctest.so.2 -> libctest.so.2.0
Cela soutient avoir plusieurs versions incompatibles d'une bibliothèque installée sur un système si différents exeucatbles ont besoin de différentes versions de cette bibliothèque.
Si le nom du fichier 'so' actuel est' libctest.so.199', j'ai juste besoin de créer un lien 'libctest.so -> libctest.so.199', non? – user4016367