Ich habe nur einen PC, auf dem Linux installiert ist. Allerdings habe ich mehrere Versionen derselben Bibliothek. Da unterschiedliche Software von unterschiedlichen Versionen derselben Bibliothek abhängen kann, muss ich sie alle auf dem System behalten.
Haben Sie gute Ideen, um die einwandfreie Funktion aufrechtzuerhalten?
Alle Referenzen sind willkommen.
[Aktualisieren]
Zum Beispiel:
Ich habe zwei Versionen von G++, z. B. G++4.8 und G++5.2.
Ich möchte, dass die zugehörigen Dateien in unterschiedlichen Pfaden gespeichert werden, wie:
/soft/g++/4.8/
und/soft/g++/5.2
Wenn ich g++ verwende, kann ich die Version ganz einfach mit einem einfachen Befehl ändern. Ich habe festgestellt, dass Software Environment Managementhttp://modules.sourceforge.net/
Antwort1
Wenn Ihre Bibliothek ihresonamerichtig, Sie können problemlos mehrere Versionen installieren. Beispielsweise habe ich derzeit drei Versionen von libreadline
installiert:
$ ls -l /lib/x86_64-linux-gnu/libreadline.so.*
lrwxrwxrwx 1 root root 18 Dec 4 2015 /lib/x86_64-linux-gnu/libreadline.so.5 -> libreadline.so.5.2
-rw-r--r-- 1 root root 263352 Dec 4 2015 /lib/x86_64-linux-gnu/libreadline.so.5.2
lrwxrwxrwx 1 root root 18 Oct 4 2016 /lib/x86_64-linux-gnu/libreadline.so.6 -> libreadline.so.6.3
-rw-r--r-- 1 root root 296792 Oct 4 2016 /lib/x86_64-linux-gnu/libreadline.so.6.3
lrwxrwxrwx 1 root root 18 Jan 24 16:17 /lib/x86_64-linux-gnu/libreadline.so.7 -> libreadline.so.7.0
-rw-r--r-- 1 root root 309168 Jan 24 16:17 /lib/x86_64-linux-gnu/libreadline.so.7.0
Dies funktioniert, weil Programme auf den Soname verweisen. Alles, was für Version 5 erstellt wurde, verweist also auf libreadline.so.5
, alles, was für Version 6 erstellt wurde, verweist auf libreadline.so.6
usw. Die Anforderung auf der Bibliotheksseite ist, dass alle Versionen mit demselben Soname ihre ABI beibehalten müssen: Neue Versionen können Funktionen hinzufügen, aber vorhandene Funktionen nicht beschädigen. Jede schwerwiegende Änderung führt zu einer Erhöhung des Soname.
Wenn all dies richtig gemacht wird (auf der Bibliotheksseite), sollten Sie nie mehrere Versionen einer Bibliothek mit demDasselbeSoname: Solange Sie die neueste Version haben, können Sie jede Software ausführen, die mit jeder Version der Bibliothek mit demselben Soname erstellt wurde. Um das libreadline
Beispiel fortzusetzen: Software, die mit Version 5.1 der Bibliothek erstellt wurde, läuft problemlos mit Version 5.2. (Das Gegenteil ist nicht unbedingt der Fall; Software, die neue Funktionen in 5.2 verwendet, läuft nicht mit 5.1.)
Es könnte sich lohnen, einen Blick darauf zu werfen libtool
(ja, ich weiß), wenn Sie es nicht bereits verwenden: Es hat eine einigermaßen brauchbareVersionierungsschemadas Soname-Bumps behandelt.
Einige Bibliotheken unternehmen außerordentliche Anstrengungen, um die Notwendigkeit von Soname-Bumps zu minimieren. Die GNU C-Bibliothek ist ein Beispiel dafür. Sie verwendet Symbolversionierung in großem Umfang, um ABI nicht zu beschädigen, führt aber dennoch neue Funktionen und abwärtskompatible Änderungen ein (sie behält einfach die alten Versionen bei,innendie Bibliothek).