web-dev-qa-db-ja.com

develパッケージによって.soパッケージが提供されるのはなぜですか?

RPMパッケージングで興味深いパターンを見てきました。メインライブラリパッケージには、共有ライブラリ自体が含まれます。

/usr/lib64/libavcodec.so.54

-develパッケージは、ヘッダーとシンボリックリンクを提供します。

/usr/include/libavcodec/libavcodec.h
/usr/lib64/libavcodec.so -> /usr/lib64/libavcodec.so.54

Libavcodec.soシンボリックリンクがdevelパッケージによって提供され、共有ライブラリパッケージに含まれているだけではないのはなぜですか?シンボリックリンクは、開発者が望むものと関係がありますか?ヘッダーは理にかなっていますが、なぜ共有オブジェクトへのシンボリックリンクなのですか?

7
Naftuli Kay

ディストリビューションのソフトウェアは一貫して機械的にリンクされており、libavcodec.so.54が見つかることを期待しているため、ビルド済みのパッケージにはバージョン管理されていない名前は必要ありません。

ただし、自分でソフトウェアを構築している場合は、-lavcodecなどを使用するのが一般的で、libavcodec.soはバージョン管理されていません。同様に、ビルドスクリプトは、これらの名前が存在することを期待する場合があります。

バージョン管理されていない名前は配布パッケージには必要ないため、デフォルトでは含まれていませんが、他のソフトウェアをビルドするときに役立つため、-develパッケージに含まれています。他のディストリビューションは異なる描写を行い、メインパッケージに.soリンクを含めます。どちらも合理的な選択です。

9
Michael Homer