私の考えでは、Linuxの多くの問題は依存関係の不一致が原因で発生します。特に2つのバージョンのライブラリをインストールすることはできません。
したがって、プログラムAに「lib1.2」が必要で、プログラムBに「lib1.3」が必要な場合は、一緒に実行することはできません。
質問:
- そうですか?
- 中央リポジトリがlib1.2とlib1.3の両方をサポートし、プログラムが要求したバージョンを取得できるのはなぜですか?
答え1
ほとんどのLinuxディストリビューションでは、システムに複数のバージョンのライブラリがあることは問題ではありません。つまり、異なるバージョンの共有ライブラリを持つことです。ソネーム/usr/lib
同じディレクトリに共存できます。また、正しいパッケージ名を指定して、これらのライブラリを複数インストールするようにパッケージマネージャに指示することもできます。
apt-get install libjpeg7
apt-get install libjpeg8
実際、このシステムには2つのトラップが発生する可能性があります。
ほとんどのディストリビューションは、スペースを節約するためにリリースごとに1つのライブラリバージョンのみを提供します。たとえば、Debian Wheezyだけです。ソースから特定のライブラリバージョン(たとえば)を
libjpeg8
インストールし続け、問題なく他のバージョンと共存できます。libjpeg7
他のディストリビューションからパッケージをインストールしてみることもできますが、多くの依存関係が発生する可能性があるので注意してください。場合によっては、同じ名前(互換性を意味する)を持つ2つのライブラリバージョンが一部のプログラムでは機能しますが、他のプログラムでは機能しないことがあります。ところで、これが当初は複数のバージョンのディストリビューションを持つ主な理由です。この場合、解決策は互換性のないライブラリを外部に維持
/usr/lib
し、LD_LIBRARY_PATHまたはchrootを介して特定のプログラムにアクセスできるようにすることです。
答え2
短い答え:
- いいえ。
- 一部のディストリビューションではこれに該当します。
より長い答え:
Linuxはディストリビューションではなくカーネルです。次のディストリビューションを使用する場合ニックOS、同じライブラリの複数のバージョンを同時にインストールするのは簡単です。
答え3
RE:「Windowsでは見たことがない」についてのあなたの意見
Windowsでは、ほとんどすべてのプログラムが使用する基本ライブラリの追加コピーを独自のディレクトリにインストールするので、最終的には同じライブラリの何十ものコピーがインストールされるため、これを防ぎます。これがsetup.exe
Direct X、Dot Net、Visual Cなどの同じライブラリを再インストールするための同様のインストーラをよく見ている理由です。
Windows は、Linux がバージョンの共有ライブラリをサポートする方法と同様に、バージョンの DLL をサポートしていますが、マイクロソフトはアプリケーション開発者がソフトウェアに依存する特定のバージョンをアプリケーションに含めることをお勧めします。これは、インターネット時代以前に必要だった可能性があります。これが必要な場合があります。ユーザーは重要なライブラリのコピーを取得します。
Linuxでも同じことをすることは可能ですが、a)無駄で怠惰なので、お勧めできません(アプリケーション開発者とライブラリ開発者の場合)。 b) デフォルトでは、Linux はそのタスクのプログラムディレクトリと同じ方法で実行しません。共有ライブラリ - LD_LIBRARY_PATHで指定されたディレクトリでのみ検索します。一部のプログラムには、バイナリ実行可能ファイルを実行する前にLD_LIBRARY_PATHを変更できるシェルスクリプトラッパーが付属しています。