2016-11-04 20 views
0

私が配布するライブラリパッケージがあります。いくつかの時間前に、ビルドシステムは自家製のMakefileからGNU Autotoolsに切り替えられました。そのため、libtoolを使用して、複数のインストール済みバージョンのライブラリを簡単に管理することができます。配布用にRPMに切り替えたので、アップグレード時に以前のバージョンを完全にアンインストールしないようにスペックファイルを「医師」する方法を知りたいと思います。もちろんライブラリをアップグレードするためのspecファイルの適切な定義

[[email protected] libtest]$ ls /usr/lib64/libaby* 
/usr/lib64/libabyss.a /usr/lib64/libabyss.so /usr/lib64/libabyss.so.0.0.1 
/usr/lib64/libabyss.la /usr/lib64/libabyss.so.0 

、libtool-として:

例えば、ダミーのライブラリプロジェクトのバージョン1.0.0をインストールした後、私はsudo yum localupdate ....後、私は以下の持っている、そして、

[[email protected] libtest]$ ls /usr/lib64/libaby* 
/usr/lib64/libabyss.a /usr/lib64/libabyss.so /usr/lib64/libabyss.so.0.0.0 
/usr/lib64/libabyss.la /usr/lib64/libabyss.so.0 

持っています制作されたライブラリの唯一の「本当の」ファイルは、libabyss.a, libabyss.la and libabyss.so.0.0.1です。 libabyss.so.0.0.1がインストールされた後にlibabyss.so.0.0.0が残るようにするには、specファイルで何を行う必要がありますか?それに応じてシンボリックリンクが処理されます。

答えて

0

ライブラリーのロードに使用されるシンボリックリンクはldconfigで管理されており、ライブラリーのSONAMEに基づいています(my post on the topicを参照してください。 .so.0.0.1何もそれを使用することはありません

異なるABIかもしれないので互換性を望むなら、versioning is done correctlyを確認する必要がありますが、それは私が読むことのできるものではないようです。

RPMには、これらのケースでは、特定のライブラリの複数のバージョンを保持する特別なケースがあるかどうかはわかりません。 uldは本当にそれが起こる必要はありません。

+0

私は、ライブラリの_SONAME_に_current_と_age_パラメータの完全な影響があるのか​​疑問に思っていました。 RPMの実際のリリースをビルドする際には、* -release *フラグを使用する予定です。合計6つのライブラリがインストールされています。そのうち2つは-releaseフラグを使用します。他は頻繁に変更されません。はい、私は彼らが別々であるべきであることを知っています、しかし、現在、彼らはそうではありません。 –

0

これは実際には機能しません。ライブラリのバージョン管理に関する通常のGNUビルドシステムの前提は、-version-infoに設定した値にはdescribed hereというスキームを使用することです。 Diegoは、RPMに古いlibを残すように説得することができたとしても(IIRC、rpmを実行するとできると思います)、古いバージョンは古いものと同じSONAMEを共有します(例:libabyss.so.0)。 ldconfigがライブラリのインストール/アップグレードで実行されたときに孤立している可能性があります。人々はこれをしたいとき

は通常、彼らは、libtool -releaseフラグを使用するか、先行SONAMEのバージョン番号を入れて libabyss0libabyss1、などのようなRPMパッケージの名前を変更します。

+0

そうです、私は-releaseフラグを見つけました。私はそれを使用する予定です。私たちがリリースしたライブラリは実際にはライブラリのコレクションです。そのうちの2人は、より多くの "顧客が直面している"ライブラリであるため、 - releaseフラグを使う予定でした。 –

関連する問題