Boost logo

Boost Users :

From: Vladimir Prus (vladimir_at_[hidden])
Date: 2008-06-25 13:25:44


David Abrahams wrote:

> Vladimir Prus wrote:
>> 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.
>
> For the past few years we've had a GCC option that allows you to expose
> from dynamic libs only those names you specify, sort of like declspec on
> Windows. I don't remember the name of the flag, though.

-fvisibility, I believe. I actually though there's a way to cause a shared
library to prefer its own symbols -- but apparently it's not possible,
at least with gcc, in any easy way.

- 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