1

我已经编译了一个共享库(libcurl)。最后我发现它生成了“libcurl.so.5”。“.so”表示共享库。但是数字 5 是什么意思呢?如何生成没有数字 5 的库?就像“libcurl.so”

4

1 回答 1

5

最根本的是,它只是一个版本号。如果版本号从 5 增加到 6,那么它应该表明所有以前链接到版本 5 的程序都与版本 6 二进制不兼容,因此需要重新编译。例如,如果从版本 6 中删除了一个函数,那么显然任何使用它的应用程序都将不再工作,因此应用程序自动切换到较新的库版本显然是不安全的。另一方面,对现有功能的错误修复不需要重新编译或移植应用程序,因此即使应用程序是针对“以前的版本(即,嗯,还是5)”。

实际上它有点混乱,因为不同的人以不同的方式使用版本号(通常在他们真的不需要时增加它)。

libtool 项目有一个更严格、更有用的指南,关于何时应该更新库版本号。

最后,您不应该生成没有版本号的库。这是对您的用户的一个承诺,即该库将来是否兼容二进制。

于 2013-10-28T12:15:38.890 回答