Boost logo

Boost-Build :

From: Caleb Epstein (caleb.epstein_at_[hidden])
Date: 2006-08-30 16:54:50


I tried using BBv2 to install Boost for the first time today. I've
been using it to run regression tests for a while, but I ran into a
v1/v2 difference that concerns the --layout=system option.

With BBv1, installing with --layout=system would install shared
libraries like so:

$(prefix)/lib:
lrwxrwxrwx 1 cepstein wt 31 Aug 3 11:00 libboost_iostreams-mt.so ->
libboost_iostreams-mt.so.1.35.0
-rwxr-xr-x 1 cepstein wt 29K Aug 3 11:00 libboost_iostreams-mt.so.1.35.0

The library name (up to the .so) has no version number information,
but there is a version number suffix. This is standard practice for
versioned shared objects, and the behavior I have come to expect. I
can now install several versions of Boost libraries in the same
directory with no ill effects. Applications link using e.g.
"-lboost_iostreams-mt", but the actual runtime dependency (e.g. when
you run ldd on the executable) is libboost_wave-mt.so.1.35.0. The
linker picks the versioned object that the symlink was pointing to
when the executable was linked.

The upshot of this is that I can always use the un-versioned name in
my build system and my old binaries built with Boost 1.33.0 will
continue to work as long as I keep the .so.1.33.0 files around on my
system. This is even if I have later installed 1.34.0, 1.35.0 and so
on.

When I install using BBv2 and --layout=system, I get only this:

-rwxrwxr-x 1 cepstein wt 15K Aug 30 16:28 libboost_iostreams-gcc-mt.so

Note that there is no versioned .so file and no symlink. So if I link
an application to this library, the runtime dependency will be for
libboost_iostreams-gcc-mt.so. As a result, I no longer have the
ability to install a newer version of this library without breaking
old code.

Can the BBv2 --layout=system be made to work more like the old way? I
dislike encoding the version number in the explicit part of the
filename as this requires changes to my build system whenever I
upgrade versions of Boost, and the version redundancy in filenames
like "libboost_iostreams-gcc-mt-1_35.so.1.35.0" makes no practical
sense on platforms that support versioned shared objects.

-- 
Caleb Epstein

Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk