|
Boost Users : |
Subject: Re: [Boost-users] BOOST_ALL_DYN_LINK
From: OvermindDL1 (overminddl1_at_[hidden])
Date: 2010-03-08 20:05:29
On Mon, Mar 8, 2010 at 9:43 AM, Vladimir Prus <ghost_at_[hidden]> wrote:
> Paul wrote:
>
>> Â Â > Then, if I define BOOST_ALL_DYN_LINK, I get lots of these messages:
>> Â Â >
>> Â Â > boost_1_42_0\boost/signals/detail/signal_base.hpp(113) : warning
>> Â Â C4251:
>> Â Â > 'boost::signals::detail::signal_base_impl::combiner_' : class
>> Â Â 'boost::any'
>> Â Â > needs to have dll-interface to be used by clients of class
>> Â Â > 'boost::signals::detail::signal_base_impl'
>> Â Â > 39> Â Â Â Â boost_1_42_0\boost/any.hpp(36) : see declaration of
>> Â Â 'boost::any'
>> Â Â >
>> Â Â > I've read up on this and understand why the warnings are shown.
>> Â Â >
>> Â Â > BUT,
>> Â Â > I don't understand why I am able to still link my program if I do
>> Â Â NOT define
>> Â Â > BOOST_ALL_DYN_LINK.
>> Â Â >
>> Â Â > Without the flag, it compiles without warnings, it links without
>> Â Â problems,
>> Â Â > AND the executable requires the signals DLL to be available, so
>> Â Â clearly it
>> Â Â > IS dynamically linked. Â Right?
>>
>> Â Â Do you include import library for Boost.Signals in the link? Then,
>> Â Â presumably,
>> Â Â compiler automatically 'dllimports' the symbol. Please see:
>>
>> Â Â Â Â Â http://blogs.msdn.com/oldnewthing/archive/2006/07/26/679044.aspx
>>
>> Â Â Does this help?
>>
>> Â Â - Volodya
>>
>>
>> This DOES help a lot !
>>
>> So, I have a few options:
>>
>> 1) Define BOOST_ALL_DYN_LINK and put up with the excess warnings.
>> Â This would be ok if the boost developers could "fix" their headers by
>> adding #pragmas to hide the warnings when they know its not a problem.
>>
>> 2) Define BOOST_ALL_DYN_LINK and write a couple of header files that wrap
>> the boost headers with #pragmas (eg especially for boost::signals)
>>
>> 3) Do not define BOOST_ALL_DYN_LINK, and allow Windows the link "the naive
>> way", which might give slower performance, but maybe not.
>
>
> It would certainly help if somebody with practical experience with Windows
> comment here (which I am not). For all I understand, that warning is false
> positive, given that boost::any is all templated code, and probably the
> best solution is to disable it in your project settings -- and, maybe,
> when building boost itself? Comments?
If is a false positive, ignore it. That could only cause problems if
boost::any changed between boost versions *AND* you compiled multiple
dynamic libraries with different boost versions where boost::any
changed *AND* you passed a boost::any across the library boundaries
*AND* used it on both sides rather then just pass it back. Since that
is unlikely to be the case, ignore it.
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