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
.