Hatena::ブログ(Diary)

torutkの日記 RSSフィード

2008-11-03 Boost 1.37.0とRPMパッケージ化

[]Boost 1.37.0のRPMパッケージ作成メモ

11/3付けでBoost 1.37.0がリリースされました。今年に入って頻繁なバージョンアップが行われています。(1.35, 1.36, 1.37といずれも2008年)

1.37.0のRPMパッケージ作成を行いました。CentOS 5ですが、GCC 4.x系の環境なら同じように出来るかと思います。RPMパッケージ作成方法は、CentOS用RPMバイナリパッケージのページに記述しました。

普段意識していなかったSONAME、ELFヘッダーを読むコマンドについて

SONAMEとreadelfコマンド

以前、書籍「Linkers & Loaders」を読んだときにちょっと出てきていたので記憶にありましたが、自分で作るプログラムでは使用していませんでした。

動的リンクライブラリファイル(ELF形式)を使ったリンク時に、メジャーバージョン番号までリンク情報に含めると、バイナリ互換を失うバージョンアップ(つまりメジャーバージョン番号の変更)があると、実行時にリンクが失敗するため、実際にプログラムが実行されてしまい、途中で挙動不審になることが防げます。

libboost_hoge.so に対して、SONAMEは、libboost_hoge.so.2 のように付けている

ライブラリファイルが持つSONAMEは、readelfコマンドで確認できます。

$ readelf -d libboost_date_time.so

:

0x0000000e (SONAME) Library soname: [libboost_date_time.so.4]

:

アプリケーションは、リンク時に -lboost_hoge と指定しても、実際にはlibboost_hoge.soが持つSONAMEであるlibboost_hoge.so.4とリンクされる設定がバイナリファイルに記録されます。実行時には、バイナリファイルに記録されたSONAMEを持つライブラリファイルが見つからないとエラーとなります。

しかし、Boostでは、バイナリ互換か否かがバージョンアップ時によく見えない(明示的にドキュメントされていない)のと、Boostのバージョン番号がバイナリ互換とは無関係に付けられているので、単純にはいきません。

RedHat(Fedora)のboost RPMパッケージを見ると、SONAMEにバージョン番号を独自に振っています。(例:boost_date_time.so.3 )

kenken 2008/11/05 00:20 はやくも1.37.0ですか...

subarusubaru 2008/11/26 11:03 CentOS5.2用のBoost1.37のRPMを是非公開してください.
利用させて頂きます.

torutktorutk 2008/11/27 08:18 公開したいのはやまやまですが、boostはrpmファイルのサイズ合計が大きく(50MB超)、個人契約のプロバイダでは上限を超えてしまいます。specファイル・パッチファイルは公開しているので、rpmbuildで生成していただければ、と思います。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証