Is there any common reason not provide such symbolic links? Which goal is achieved by that?
懸念される唯一の理由は、ライブラリのシンボリック リンク バージョンとインストールされたライブラリの間でライブラリ API の変更があるかどうかです。その場合、必要な関数名が見つからない場合はリンカ エラーが発生するか、すべての名前が同じであるが特定の関数の動作がバージョン間で変更されている場合は壊れたコードが発生します。共有ライブラリへのシンボリック リンクを手動で作成する場合は、共有オブジェクト ライブラリのバージョン間で必要なライブラリ呼び出しが同じであることを確認する必要があります。一般に、ライブラリがそのsoname
(共有オブジェクト名) を変更する場合、そのライブラリのユーザーが認識して適切な使用を確認する必要があるライブラリに根本的な変更があるためです。あなたが必要libz.so
とし、あなたのシステムが持っているという事実libz.so.1
は、そのような変更またはsoname バンプが発生したことを示します。から必要な機能libz.so
が存在し、変更されていないことを確認する必要がありますlibz.so.1
。(ほとんどの場合、ライブラリは下位互換性がありますが、そうでない場合もあります [例: libpng-1.2 と libpng-1.4])
それが sonames の要点です。シンボリックリンクを手動で作成するか、libz をダウングレードして必要なリンクを取得する必要がある状況に陥った場合libz.so
、soname の変更により、libz.so と libz.so.1 の間にライブラリの変更があったことがわかります。あなたがやろうとしている方法でlibz.so.1
シンボリックリンクを使用できることを確認するのはあなた次第libz.so
です。
なぜシンボリックリンクが必要なのですか? シンボリックリンクなしのlibz.so.1
代わりに使用するだけでコードが満足できないのはなぜですか? libz.so
コンパイルしているコードは、 を探していlibz.so
ます。お気づきのとおり、システムには存在しません。libz.so -> libz.so.1
シンボリック リンクを提供することにより、コードを変更せずに、コードlibz.so.1
が名前から検索できるようになりますlibz.so
。シンボリックリンクを作成することは、基本的には、コードを修正して動作するようにするためのハックlibz.so.1
です。いずれかのシステムのコードへのアクセスに応じて、それが必要になる場合がありますが、この状況を処理する適切な方法は、両方のシステムとコードを更新して、現在のライブラリを使用してビルドすることです。libz.so.1
そうは言っても、変更が使用する必要のあるlibz.so.1
部分に影響を与えないlibz.so
場合、シンボリックリンクは問題なく機能します。