操作系统: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/