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。

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

1 回答 1

0

我的一位同事刚刚通知我,主要 SOnumber 的更改反映了两个版本之间的不兼容,而次要 SOnumber 则不然。

所以,如果它是 libexpat.so.0.0 和 libexpat.so.0.1,就不会有问题,但只要它从 libexpat.so.0 到 libexpat.so.1,就意味着有一个不兼容。

于 2013-05-20T22:40:02.250 回答