Boost logo

Boost Users :

From: Vladimir Prus (vladimir_at_[hidden])
Date: 2008-06-25 07:46:53


dariomt_at_[hidden] wrote:

> Hi all,
>
> I'm using header-only boost libs in two static libraries that will be linked
> into an executable.
>
> No boost components are used in the interfaces of those libs, boost is only
> used in the implementation inside the libraries.
>
> Is it possible to mix versions of boost in those two static libraries? Will
> the linker complain, or will it just get confused and mess up the
> executable?

In general, this is highly risky business. On GCC, each static library
will contain a copy of every template function used by a static library.
If the linker finds that the same function is used in both static libraries,
it will put only one copy in the output executable, and if the definitions
of those functions differ, you're in trouble. See the attached example, which,
then run, produces:

        a.cpp:say
        a.cpp:say

Which is clearly wrong. This *might* work with shared libraries, but you
need to consult your toolchain documentation.

There's nothing Boost can do to help here, except maybe changing namespace
name with each version.

- Volodya




Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net