2016-03-30 4 views
1

私は共有ライブラリのバージョンがLinux上でどのように管理されているのか、プログラムを構成しコンパイルするときにこれらのファイルが異なるバージョンのインクルードファイルとどのようにやりとりされるのかを理解しようとしています。Linuxには複数のバージョンの共有ライブラリがありますが、どのようなものが含まれていますか?

私は、ファイル名にlibxxx.soの最初のバージョン番号が異なる複数のバージョンの共有ライブラリ(.soファイル)をシステムに持たせることができます。異なるプログラムが同じライブラリの異なるバージョンにリンクされている可能性があります。ライブラリの新しいバージョン(.so。#が変更されました)は、通常、以前のバージョンと互換性がありません。 (最初の後のバージョン番号は、互換性に影響を与えないマイナーライブラリの変更です)。

古いバージョンのライブラリにリンクされている古いプログラムをコンパイルしている(または再コンパイルしている)場合、私のシステムに古いライブラリと新しいライブラリの両方がある場合は、複数の各ライブラリのバージョンに関連付けられているインクルードファイルのバージョン。したがって、古いバージョンのライブラリを利用できるにもかかわらず、古いバージョンのインクルードファイルがリンクされていなくても、実際にはそのプログラムを再コンパイルできません。本当?

もしそうなら、複数のライブラリバージョンのサポートが疑わしいと思われます。古いバージョンのライブラリの唯一のユーザーは、古いバージョンが最新のときにコンパイルされたプログラムであり、リンクするすべてのライブラリのすべてのバージョンが最新バージョンでない限り、プログラムを再コンパイルしないでください。システムにインストールされているライブラリライブラリの新しいバージョンがインストールされるとすぐに、古いバージョンを使用しているすべてのプログラムはコンパイルできなくなります(新しいライブラリを使用して新しいバージョンに更新されていない限り)。右?

また、インストールされている各ライブラリのバージョンごとに別々のインクルードファイルのサブディレクトリを保存するという問題が発生するため、適切なインクルードファイルとライブラリバージョンを使用してプログラムを再コンパイルできますか?

答えて

1

インクルード・ファイルが共有ライブラリから異なる方法で処理されています

  • 共有ライブラリを使用すると、持っているファイルへのシンボリックリンクですをリンクする際の開発パッケージが使用する一つの名前があるでしょう特定のsoname(名前とバージョン)。リンクした後、プログラムにはファイルへの参照があり、実行時にはプログラムが実行されます。

  • インクルードファイルは、インクルードパスのオプション-Iで区別することができます。 便利なライブラリのバージョンがある場合、開発者によっては、関連するヘッダーファイルを保持するための異なるディレクトリ名を使用してバージョンをパッケージ化することができます。こうすることで、コンパイル時に-Iオプションを変更するだけで、ビルドスクリプトが特定のバージョンのヘッダーを処理できるようになります。しかし、共有ライブラリとは異なり、ヘッダファイルはビルドライブラリを使用するプログラムの場合にのみ使用されます。

+0

はい、ありがとうございます。ライブラリのバージョンは、以前にリリースされ使用されていたときに便利です。したがって、常に各バージョンのインクルードファイルを別々のディレクトリにパッケージ化するのが標準的な方法です。最初のバージョン番号と後続のバージョン番号との区別は、多くの意味を持ちます。最初のものはインタフェースの変更を示し、他のものはインタフェースに影響しない小さな変更を示します。ライブラリパッケージには最初のバージョン番号ごとにインクルードサブディレクトリが必要ですが、私はこれを自分で見たことがありません。 – tedtoal