- オペレーティング システム: Ubuntu 12.04 64 ビット (精密)
- マシン: x86_64、Intel Centrino 2 (2 コア)、4 GB RAM
- 関連するライブラリ: libudunits2.so.0.1.0、libexpat.so.0、libexpat.so.1
問題の説明...
RedHat 5 マシンで libudunits2.so.0.1.0 をビルドし、それを使用するプログラムを作成しました。Ubuntu 12.04 で再構築または実行しようとしています。
RedHat マシンには libexpat.so.0 がインストールされており、これが libudunits のビルドに使用されています。
Ubuntu マシンで udunits2 を使用してビルドしようとすると、ビルドが失敗し、libexpat.so.0 が見つからないという説明が表示されます。Ubuntu マシンには libexpat.so.1 がインストールされています。
ビルド (またはビルド済みのバイナリを実行) しようとすると、libexpat.so.0 が見つからないという苦情が発生します。実行可能ファイルをリンクすると、libexpat.so.0 を必要としているのは libudunits2 であることがわかります。
すべてのライブラリに正しい SOname があることを確認しました。ldd と objdump -x は、libudunits が libexpat.so.0 の代わりに libexpat.so.1 を受け入れてはならない理由を明らかにしていません。共有ライブラリは一般に下位互換性があるためです。(詳細については、投稿の最後にあるコマンド出力を参照してください)
libexpat には、これら 2 つのバージョン間の下位互換性がないのでしょうか?
多分私は何か他のものを逃しましたか?
注: Ubuntu 12.04 で使用している libudunits は、RedHat 5 からコピーされたものです。
コマンド出力...
REDHAT 5...
===========
bash$ ldd libudunits2.so | grep expat
libexpat.so.0 => /lib/libexpat.so.0 (0xf7efc000)
bash$ objdump -x libudunits2.so | grep expat
NEEDED libexpat.so.0
UBUNTU 12.04...
===============
bash$ ldd libudunits2.so | grep expat
libexpat.so.0 => not found
bash$ objdump -x libudunits2.so | grep expat
NEEDED libexpat.so.0