Linux がインストールされている PC は 1 台しかありません。ただし、同じライブラリの複数のバージョンがあります。異なるソフトウェアが同じライブラリの異なるバージョンに依存する可能性があるため、それらすべてをシステム上に保持する必要があります。
彼らをうまく働かせ続けるための良いアイデアはありますか?
参考資料があれば歓迎します。
[アップデート]
例えば:
g++ には 2 つのバージョンがあります (例: g++4.8 と g++5.2)。
関連ファイルを次のように異なるパスに保存したい
/soft/g++/4.8/
:/soft/g++/5.2
g++を使用すると、簡単なコマンドで簡単にバージョンを変更できます。ソフトウェア環境管理http://modules.sourceforge.net/
答え1
ライブラリがソナメ正しくインストールすれば、問題なく複数のバージョンをインストールできます。たとえば、現在 の 3 つのバージョンがインストールされていますlibreadline
。
$ 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: 最新バージョンをお持ちであれば、同じ soname を持つライブラリのどのバージョンに対してもビルドされたソフトウェアを実行できます。このlibreadline
例を続けると、ライブラリのバージョン 5.1 でビルドされたソフトウェアは、バージョン 5.2 でも問題なく動作します。(逆は必ずしも当てはまりません。5.2 の新機能を使用するソフトウェアは、5.1 では動作しません。)
まだ使っていないなら、調べてみる価値はあるかもしれませんlibtool
(ええ、わかっています)。かなり使えるバージョン管理スキームsoname バンプを処理します。
一部のライブラリは、soname の変更の必要性を最小限に抑えるために並外れた努力をしています。GNU C ライブラリはその一例で、新しい機能や後方互換性のない変更を導入しながら ABI を壊さないようにシンボル バージョン管理を広範に使用しています (古いバージョンはそのまま残します)。内部図書館)。