0
  • オペレーティング システム: 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
4

1 に答える 1