问题描述......
我在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
答案 0 :(得分:0)
我的一位同事告诉我,主要SOnumber的变化反映了两个版本之间的不兼容性,而次要的SOnumber则没有。
所以,如果它是libexpat.so.0.0和libexpat.so.0.1,那就没有问题了,但是一旦从libexpat.so.0到libexpat.so.1,它就会出现问题意味着存在不兼容性。