操作系统:Ubuntu 12.04 64-bit(Precise)
机器: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.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

最佳答案

我刚刚从一位同事那里得知,主要SOnumber的更改反映了两个版本之间的不兼容,而次要SOnumber则没有。

因此,如果它是libexpat.so.0.0和libexpat.so.0.1,就不会有问题,但是一旦它从libexpat.so.0转到libexpat.so.1,就意味着存在一个不兼容。

关于linux - libudunits2需要libexpat.so.0,将不接受libexpat.so.1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16658306/

10-15 13:11