たとえば、sqlite3をアップグレードしたいとします。私の(apt-get)アップデートとアップグレードバージョンは3.7.13です。最新バージョンは3.7.14です。ソースから最新バージョンをインストールすると、このコンピュータの既存のソフトウェアが破損しないことがわかりますか?他のソフトウェアに依存するソフトウェアのリストはありますか?
sqlite3には必須ではありませんが、一般的に知りたいです。
私はDebian wheezeを実行しています。
ベストアンサー1
バイナリ互換性 - ABIとAPI
アップデートがコンピュータ上の既存のソフトウェアを破損したり破損したりしない可能性がある理由を理解するには、ライブラリに関するあいまいなアイデアが必要です。ABI砂APIS.バラよりこの関連質問StackOverflowの詳細をご覧ください。
共有ライブラリのバージョン管理
ソフトウェアには通常、少なくともメジャーバージョン番号とマイナーバージョン番号が付属しています。一般に、ABIの非互換性は、メジャーバージョン番号の変更時に導入されるべきであることを読んでいます。したがって、マイナーバージョン間でアップグレードする場合は、通常は以前のバージョンではなく最新バージョンをインストールするのが安全です。
インストールされている共有ライブラリには、ファイル名にバージョン番号を追加する必要があります。これは一般的に次のようになります。解放するバージョン番号。ソースコードが構築されると、この共有ライブラリに依存する他のアプリケーションがリンクされます。結果のバイナリは、動的リンカーを使用してそのライブラリによって識別される正しい共有ライブラリを見つける必要があります。基本バージョン番号。 (使用するリンカーによって異なる場合があり、ld
マイナーバージョンを指定するオプションがある場合があります。)
libsqlite3
libsqlite3-0(3.7.13-1)には、共有ライブラリファイルとそのライブラリを指す2つのシンボリックリンクがあります。
> ls -l /usr/lib/x86_64-linux-gnu/libsqlite3.so*
lrwxrwxrwx 1 root root 19 Jun 14 14:05 /usr/lib/x86_64-linux-gnu/libsqlite3.so -> libsqlite3.so.0.8.6
lrwxrwxrwx 1 root root 19 Jun 14 14:05 /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 -> libsqlite3.so.0.8.6
-rw-r--r-- 1 root root 692984 Jun 14 14:05 /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6
それでは、ライブラリや実行可能ファイルがリンクされていること、そしてどのバージョンに依存しているのか、どうすればわかりますか?
Linuxでは、以下を使用します。
`ldd <filename>`
OS Xの場合:
`otool -L <filename>`
たとえば、Pythonのsqliteモジュールを実行するために必要なlibsqlite3のバージョンを見てみましょう。
> ldd /usr/lib/python2.7/lib-dynload/_sqlite3.so | grep sqlite
libsqlite3.so.0 => /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 (0x00007fe32872c000)
したがって、フルネームと番号付き共有ライブラリではなく、メジャーバージョン番号付きシンボリックリンクのみが必要です。その後、更新すると、新しい共有ライブラリを指すようにlibsqlite3.so [.0]シンボリックリンクのみを更新する必要があります。
ソースから最先端のlibsqliteを構築すると、同じメジャーバージョン番号を持つ共有ライブラリが作成されます。そうでない場合は、いつでもシンボリックリンクを上書きし、必要なバージョンを指してテストし、必要に応じてシステムパッケージに戻すことができます。
資格
Debianを使用すると、「libsqlite3-0(267)に依存するパッケージ」を見ることができることにも言及したかったですaptitude
(他のパッケージでも同じです)。もちろん、ソースから多くのアプリケーションをコンパイルしてdpkg
それを通知しないと、このリストは完全ではない可能性があります。