libudunits2需要libexpat.so.0,不接受libexpat.so.1

时间:2013-05-20 20:57:55

标签: linux shared-libraries ubuntu-12.04

  • 操作系统: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的抱怨。链接可执行文件时,我们发现libudunits2需要libexpat.so.0。

我已确认所有库都有正确的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

1 个答案:

答案 0 :(得分:0)

我的一位同事告诉我,主要SOnumber的变化反映了两个版本之间的不兼容性,而次要的SOnumber则没有。

所以,如果它是libexpat.so.0.0和libexpat.so.0.1,那就没有问题了,但是一旦从libexpat.so.0到libexpat.so.1,它就会出现问题意味着存在不兼容性。