几个月前,我建立了使用libxml2的共享库,在Debian一个C软件。 我创建了一个.deb文件,安装的软件,和Ubuntu用户可以使它运行。
今天,Ubuntu的最新版本具有的libxml2更大的版本。 所以,现在,该软件不能运行,它会询问是否有以前版本的libxml2,并使其工作正在建设的软件,而在libxml2的新版连接的唯一途径。
所以我的问题是,是否有可能对共享库链接,而不需要特定版本(承担风险的软件无法在某些版本的工作)?
如果不是,那么什么是,如果你不能在任何Linux发行部署软件的共享库链接的真正优势在哪里?
感谢帮助。
最好的问候,文森特。
大多数共享库将拥有一个嵌入式SONAME
。 这SONAME
用来表示二进制兼容性。 例如,libxml2.so.2.7.8具有嵌入SONAME
libxml2.so.2的:
readelf -Wa libxml2.so.2.7.8 | grep SONAME
0x000000000000000e (SONAME) Library soname: [libxml2.so.2]
如果libxml2.so.2.7.9出来了,它很可能仍然是用二进制兼容v2.7.8,并且仍然有SONAME
libxml2.so.2和您的应用程序会工作得很好。 只有当一个变化是引入了爆发二进制兼容性将在SONAME
得到增加,破坏你的应用程序。
如果你想创建一个包,将在所有发行版自动工作,一种方法是提供自己的libxml2的版本,然后修改LD_LIBRARY_PATH
这样,你的版本会自动被加载。