Ich glaube, Sie die filnames in umgekehrter Reihenfolge geschrieben, wie es normalerweise angezeigt wird, würden Sie 3 Dateien
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
Es ist ein Versionsschema.
Eine bestimmte Veröffentlichung/Installation einer Bibliothek hat einen vollständigen Dateinamen, z. libctest.so.1.0
, in diese Bibliothek eingebettet ist die SONAME, ein logischer Name der Bibliothek, z.B. libctest.so.1
, das auch als Symlink zur eigentlichen Datei verwendet wird.
Beim Verknüpfen einer ausführbaren Datei wird die Bibliothek SONAME zur ausführbaren Datei hinzugefügt, sodass die ausführbare Datei zur Laufzeit nach dem Dateinamen libctest.so.1
sucht. Die Konvention besteht darin, den SONAME einer Bibliothek so lange unverändert zu lassen, wie er rückwärtskompatibel ist, und ihn zu ändern, wenn rückwärts inkompatible ABI-Änderungen eingeführt werden.
Und wie Sie sagen, wird der Linker nach lib*.so
suchen, wenn Sie die Verknüpfung machen.
Auf diese Weise können ausführbare Dateien (oder andere Bibliotheken), die mit libctest.so.1
verknüpft sind, unverändert bleiben, wenn libctest
aktualisiert wird. Wenn also libctest Version 1.1 freigegeben wird, können Sie diese Dateien haben:
libctest.so.1.1
libctest.so.1 -> libctest.so.1.1
libctest.so -> libctest.so.1
Executables noch libctest.so.1 zu lokalisieren versuchen und kann daher unverändert bleiben, wenn die Bibliothek aktualisiert wird. Die Bibliothek muss so geschrieben werden, dass sie rückwärtskompatibel ist, damit dies in der Praxis funktioniert.
Wenn Sie eine neue rückwärtskompatible Bibliothek freigeben, besteht die Konvention darin, den SONAME dieser Bibliothek zu ändern, sodass Sie z.
libctest.so.2.0
libctest.so.2 -> libctest.so.2.0
Dies unterstützt mehrere inkompatible Versionen einer Bibliothek auf einem System installiert haben, wenn unterschiedliche exeucatbles verschiedene Versionen dieser Bibliothek benötigen.
Wenn der Name der tatsächlichen 'so' Datei' libctest.so.199' ist, muss ich nur einen Link erstellen 'libctest.so -> libctest.so.199', richtig? – user4016367