apt-getがライブラリパッケージを正しくインストールしていないようです。

apt-getがライブラリパッケージを正しくインストールしていないようです。

liblz4.so私は最近libraryをインストールしましたが、apt-get install liblz4-1上記のコマンドは次のファイル/リンクのみをインストールすることがわかりました。

/usr/lib/x86_64-linux-gnu/liblz4.so.1.7.1
/usr/lib/x86_64-linux-gnu/liblz4.so.1 -> liblz4.so.1.7.1

私が理解しているのは、Ubuntuのライブラリ名にライブラリのバージョンを含めることができますが、それらを含まないこれらのファイルの1つへのリンクが常にある必要があるld他のバイナリ/ライブラリがそれを見つけることができるということです。上記の例では、これらのリンクはです/usr/lib/x86_64-linux-gnu/liblz4.so -> liblz4.so.1.7.1。ただし、apt-getこのリンクはまだ作成されていないため、直接作成する必要があります。

これがパッケージの「失敗」ですかliblz4、それとも一部のUbuntuパッケージで予想されるものですか?手動でリンクを生成せずにインストールするより良い方法はありますか?

答え1

~からDebian Policy Manual、これは以下を管理します。

バイナリまたは他の共有ライブラリを共有ライブラリにリンクすると、共有ライブラリのSONAMEが不明です。代わりに、.soが追加されたライブラリ名と一致するファイルを見つけて、共有ライブラリを見つけます。ファイルは、共有ライブラリへのシンボリックリンクとしてファイルシステムに存在します。

共有ライブラリは通常、複数のバイナリパッケージに分けられます。 SONAMEシンボリックリンクはランタイム共有ライブラリパッケージによってインストールされ、ベア.soシンボリックリンクはバイナリまたは共有ライブラリをリンクするときにのみ使用されるため、開発パッケージにインストールされます。

したがって、liblz4-1ランタイムライブラリを含むパッケージで次のliblz4.so.1.7.1ものを使用できます。コンパイルされたバイナリ開発パッケージには、リンカーが正しい参照を含めることを可能にするシンボリックリンクがliblz4-devあります。liblz4.soコンパイル時

パッケージliblz4-devはランタイムパッケージの現在のバージョンによって異なるため、シンボリックリンクはぶら下がっておらず、ディストリビューションがリリースされると変更する必要がありますSOVERSION

答え2

によると、apt-file search liblz4.soそれをインストールするパッケージは選択したパッケージではありませんが、次のようになりますliblz4-dev

$ apt-file search liblz4.so
liblz4-1: /usr/lib/x86_64-linux-gnu/liblz4.so.1
liblz4-1: /usr/lib/x86_64-linux-gnu/liblz4.so.1.7.1
liblz4-1-dbg: /usr/lib/debug/usr/lib/x86_64-linux-gnu/liblz4.so.1.7.1
liblz4-dev: /usr/lib/x86_64-linux-gnu/liblz4.so

liblz4.so.1.7.1との違い(ある場合)が何であるかわかりませんliblz4.so。この検索はMint 19.3(Bionic)で行われました。

関連情報