GNU/Linux >> Linux の 問題 >  >> Linux

Linux で共有ライブラリのバージョン管理を行う方法は?

短いバージョンでは、ライブラリの soname を介してこれを行います。 http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html の第 3 章と、http://www.akkadia.org/drepper/dsohowto.pdf の第 3.3 ABI バージョニングをお読みください


Linux は次の戦略を使用します - あなた (システム管理者) は、次のように「特定の」共有ライブラリ ファイルからシンボリック リンクを提供します:

lrwxrwxrwx 1 root root    16 2011-09-22 14:36 libieee1284.so -> libieee1284.so.3
lrwxrwxrwx 1 root root    20 2011-09-22 14:36 libieee1284.so.3 -> libieee1284.so.3.2.2
-rw-r--r-- 1 root root 46576 2011-07-27 13:08 libieee1284.so.3.2.2

このようにして、開発者は -lieee1284 (任意のバージョンの ABI)、libieee1284.so.3、または特定のリリースとパッチ バージョン (3.2.2) のいずれかにリンクできます


これを処理する最善の方法は、バージョン管理を行う libtool を使用することです。

本質的に、バージョン情報はライブラリ自体にエンコードされているのではなく (または主に、私の頭からはわかりません)、ファイル名にエンコードされています。バージョン番号は通常 3 ドット形式で与えられ、メジャー番号は ABI の下位互換性が途切れるたびに大きくなり、ABI の上位互換性が途切れるたびにメジャー番号が増加し、ABI を変更しなかったパッチはマイナー番号になります。

qdot が指摘したように、lib ディレクトリ内のシンボリック リンクは重要なバージョン管理を提供します。現在インストールされている開発ヘッダーのバージョン番号のないシンボリック リンク (libfoo.so)、インストールされている各メジャー バージョンのメジャー番号のシンボリック リンク (libfoo.so.1)、および完全なバージョン番号の実際のファイルがあります。通常、複数のメジャー バージョンが共存できるように、プログラムは実行時に libfoo.so.1 を使用するようにリンクされます。


Linux
  1. Linuxでカーネルバージョンを確認する方法

  2. Linux OS のバージョンを確認する方法

  3. Linux 共有ライブラリの紹介 (共有ライブラリの作成方法)

  1. Linux 上の C++ 動的共有ライブラリ

  2. Linux で共有ライブラリを初期化する方法

  3. 古いバージョンの共有ライブラリにリンクするにはどうすればよいですか

  1. DebianLinuxでlibcライブラリのバージョンを確認する方法

  2. Redhatのバージョンを確認する方法

  3. Linux で共有ライブラリの遅延ロードを行う方法