
liblz4.so
最近、でライブラリをインストールしました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 では、ライブラリ名にライブラリ バージョンが含まれる場合がありますが、ライブラリ バージョンを含まないファイルへのリンクが常に存在し、 とld
他のバイナリ/ライブラリがそれを見つけられるようにする必要があります。上記の例では、そのようなリンクは になります/usr/lib/x86_64-linux-gnu/liblz4.so -> liblz4.so.1.7.1
。ただし、apt-get
はこのリンクを作成していないため、自分で作成する必要がありました。
これはパッケージの「失敗」なのでしょうliblz4
か、それとも一部の Ubuntu パッケージで予想されるものなのでしょうか? インストールするより良い方法はありますか (手動でリンクを作成する必要がありません)?
答え1
からDebian ポリシーマニュアル、これは次のように規定されています。
バイナリまたは別の共有ライブラリを共有ライブラリにリンクする場合、その共有ライブラリの 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) で行いました。