为什么我们在Linux中需要.so.1文件?

riv*_*one 11 c linux dynamic-linking

在Linux中,对于共享库,我通常会看到一个库的.so,.so.1和.so.1.0文件.例如,库测试应该由libtest.so libtest.so.1 libtest.so.1.0文件提供.据我了解,.so.1.0包含真实数据; .so链接到.so.1.0并用于链接.但我不明白.so.1文件的目的.有人可以澄清.so.1文件的使用吗?谢谢.

von*_*and 17

假设我们正在谈论libtest.如果你环顾四周,你会看到libtest.so,这是一个链接libtest.so.1,然后链接到libtest.so.1.5.

在这种情况下,使用的可执行文件libtest将链接libtest.so.1(这将写入可执行文件,请参阅参考资料ldd(1)).如果您的发行版更改libtest为修复错误,则新版本可能会提供libtest.so.1.6.只要没有进行ABI更改,一切正常.并且没有API更改的事实由未更改的1版本号表示.

让我们说繁忙的libtest海狸想出了一个新的,全部闪亮的,从头开始重写的库,改变了ABI.随着ABI的更改,他们将版本号更改为2.您安装该版本号,现在您已拥有该链libtest.so --> libtest.so.2 --> libtest.so.2.1.请注意,您现在已安装版本1和2.您的早期程序仍然可以正常使用libtest.so.1,但是如果您编译一个新程序,编译器(链接器,真的)将拾取libtest.so并因此将可执行文件指向新的libtest.so.2.1.

请注意,所以版本号不需要与源代码版本号有任何关系; 主要编号是ABI版本,次要编号是可选的,可用于跟踪修订.所以这里(Fedora 20)我正在使用systemd-libs-208-15.fc20.x86_64,它提供libsystemd-daemon.so.0.0.10.