- 操作系统: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。
我已经确认所有的库都有正确的 SOnames。ldd 和 objdump -x 没有透露 libudunits 不应该接受 libexpat.so.1 而不是 libexpat.so.0 的任何原因,因为共享库通常是向后兼容的。(有关详细信息,请参阅帖子末尾的命令输出)
也许 libexpat 在这两个版本之间没有向后兼容性?
也许我错过了其他东西?
注意:我在 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