有没有版本的共享库链接(Linking with a shared library without

2019-10-19 01:56发布

几个月前,我建立了使用libxml2的共享库,在Debian一个C软件。 我创建了一个.deb文件,安装的软件,和Ubuntu用户可以使它运行。

今天,Ubuntu的最新版本具有的libxml2更大的版本。 所以,现在,该软件不能运行,它会询问是否有以前版本的libxml2,并使其工作正在建设的软件,而在libxml2的新版连接的唯一途径。

所以我的问题是,是否有可能对共享库链接,而不需要特定版本(承担风险的软件无法在某些版本的工作)?

如果不是,那么什么是,如果你不能在任何Linux发行部署软件的共享库链接的真正优势在哪里?

感谢帮助。

最好的问候,文森特。

Answer 1:

大多数共享库将拥有一个嵌入式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这样,你的版本会自动被加载。



文章来源: Linking with a shared library without version