On 2020-06-15 8:46 a.m., Aleksei Nikiforov via Boost wrote:
Hi.
I've noticed that some versions ago boost started creating additional symlinks when built for linux. In addition to boost_${library}.so -> boost_${library}.so.A.B.C symlink, two more symlinks are created: boost_${library}.so.A -> boost_${library}.so.A.B.C and boost_${library}.so.A.B -> boost_${library}.so.A.B.C.
This is a Linux convention to support multiple co-existing versions, assuming that the rules for semantic versioning are followed. Note however that Boost doesn't follow semantic versioning. Its normal builds add the version numbers to the library names, so conceptually two versions of the same library are actually considered two distinct libraries by the linker.
In binary linux distributions, *.so files and header files are usually packed into devel packages, while *.so.* are packed into library packages. In case of boost and those symlinks it can lead to an issue. For example, during upgrade from boost 1.72.0 to boost 1.73.0, while both boost 1.72.0 libraries and 1.73.0 libraries are needed temporarily, boost_${library}.so.1 symlinks from both packages may conflict. These symlinks with same names point to different libraries. It's not an issue for devel packages and *.so symlinks with same names since you don't need two devel packages being installed at same time during upgrade.
That would be an issue to be reported to downstream package maintainers (in Fedora, Debian, or wherever you encounter the problem), as that is where Boost libraries are built without the version numbers in their name. This is presumably because the Linux distros' package managers assure that multiple versions will never be installed side-by-side, precisely to prevent this kind of issue. Stefan -- ...ich hab' noch einen Koffer in Berlin...