LinuxがインストールされたPCは1台だけです。しかし、同じライブラリの複数のバージョンがあります。異なるソフトウェアは同じライブラリの異なるバージョンによって異なる可能性があるため、すべてシステムに保存する必要があります。
引き続きスムーズに動作できる良いアイデアはありますか?
すべての参考資料を歓迎します。
【書き直す】
たとえば、
g++4.8 と g++5.2 という 2 つのバージョンの g++ があります。
/soft/g++/4.8/
関連ファイルを次のような別のパスに保存したいと思います。
/soft/g++/5.2
g++を使用すると、簡単なコマンドで簡単にバージョンを変更できます。ソフトウェア環境管理を見つけましたhttp://modules.sourceforge.net/
答え1
ライブラリで定義した場合ソナムそうですね。複数のバージョンを簡単にインストールできます。たとえば、現在libreadline
3つのバージョンがインストールされています。
$ 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
これは、プログラムがsonameに接続されているために機能します。したがって、バージョン5用libreadline.so.5
にビルドされたすべてのアイテムはここにリンクされ、バージョン6用にビルドされたすべてのアイテムはここにリンクされますlibreadline.so.6
。ライブラリ側の要件は、同じsonameを持つすべてのバージョンが対応するABIを維持する必要があることです。新しいバージョンでは機能を追加できますが、既存の機能を中断することはできません。大きな変化はソナメの変化を意味します。
これらのすべての作業が正しく(ライブラリ側で)完了したら、以下を使用する必要はありません。同じsoname:最新バージョンがある限り、同じsonameを持つすべてのバージョンのライブラリに対して構築されたすべてのソフトウェアを実行できます。例を続けると、libreadline
バージョン5.1ライブラリを使用して構築されたソフトウェアはバージョン5.2で正しく実行されます。 (その逆が必ずしも正しいわけではありません。5.2の新機能を使用するソフトウェアは5.1では動作しません。)
libtool
まだ試していない場合は、一度検討してみる価値があります。 (はい、わかっています。) かなり便利な機能があります。バージョン管理方式Soname 競合を処理します。
一部のライブラリは、sonameバンプの必要性を最小限に抑えるために多くの努力をしています。一例はGNU Cライブラリです。このライブラリは、ABIを損なうことなく、新機能と以前のバージョンと互換性のない変更を導入するためにシンボリックバージョン管理を広く使用しています。 、~へ図書館)。