On Fri, Jul 1, 2016 at 10:51 AM, John Peterson <jwpeter...@gmail.com> wrote:

>
>
> On Fri, Jul 1, 2016 at 5:51 AM, David Knezevic <david.kneze...@akselos.com
> > wrote:
>
>> On Fri, Jul 1, 2016 at 2:32 AM, John Peterson <jwpeter...@gmail.com>
>> wrote:
>>
>>>
>>>
>>> On Thu, Jun 30, 2016 at 10:15 PM, David Knezevic <
>>> david.kneze...@akselos.com> wrote:
>>>
>>>> I have a libMesh app (which has been working fine for a long time) that
>>>> has:
>>>>
>>>> #include <boost/property_tree/json_parser.hpp>
>>>>
>>>> I just updated to the git HEAD, and now I get boost compilation errors
>>>> for
>>>> this app, e.g.:
>>>>
>>>>
>>>> /home/dknez/software/libmesh_install/opt_real/libmesh/include/boost/type_traits/aligned_storage.hpp:29:1:
>>>> error: redefinition of ‘const size_t
>>>> boost::detail::aligned_storage::alignment_of_max_align’
>>>>  BOOST_STATIC_CONSTANT(
>>>>  ^
>>>>
>>>> /home/dknez/software/libmesh_install/opt_real/libmesh/include/boost/aligned_storage.hpp:33:1:
>>>> error: ‘const size_t
>>>> boost::detail::aligned_storage::alignment_of_max_align’ previously
>>>> defined
>>>> here
>>>>  BOOST_STATIC_CONSTANT(
>>>>  ^
>>>>
>>>> I guess this is related to the recent boost refresh? Any suggestions on
>>>> the
>>>> right fix?
>>>>
>>>
>>> Hmm... the error message is a little strange, I would have expected a
>>> "file not found" error caused by us forgetting a necessary header.  I guess
>>> could you try compiling libmesh with an external boost 1.61 instead of its
>>> internal one?  If that works, then it's some issue with our subset of
>>> boost.  If that doesn't work, then you might need to update your app to
>>> work with newer versions of boost somehow.
>>>
>>
>>
>> I've been using boost provided by Ubuntu 14.04 (which is boost 1.54), to
>> provide extra functionality that I need (e.g. the JSON parser, referred to
>> in the header above). If I add --with-boost to my libMesh configure line,
>> then it still uses the boost in contrib because it requires 1.61 or higher.
>>
>
> libmesh currently requires boost 1.57 and higher, but prior to that it
> should have been requiring 1.55 and higher... so I'm not sure how you were
> able to previously use a boost 1.54 from Ubuntu?  I suppose if:
>
> 1.) /usr/include is in your compiler path, and
> 2.) your boost is installed in /usr/include/boost, and
> 3.) you #include a header like json_parser.hpp that is not in our boost
> subset,
>
> then libmesh would think you were using its internal boost subset but in
> reality you would be mixing boost versions.
>


Yes, this is presumably what was happening for me before.




> If I update my external boost package to 1.61 then I guess it'd work fine,
>> but I'd rather not do that right now... I'm not clear on why I'm getting a
>> "previously defined" error, though... is it because by external boost
>> library (from Ubuntu) is clashing with the boost in contrib?
>>
>
> It sounds like the above is what is happening, i.e you've been mixing
> Boost versions 1.54 and 1.55 for a while now in your app, and it used to
> work fine until the recent upgrade.
>
> The best fix would be to not allow this (mixing of boost versions) to
> happen, but I'm not sure that's even possible, because we can't control
> every include path set by the user.  Other fixes:
>
> 1.) You could try relaxing the minimum version of boost required by
> libmesh to 1.54.  This should allow your --with-boost configure flag to
> work, but I'm not sure it would work with the Howard Hinnant unique_ptr.hpp
> header we use (this was what initially drove the 1.55 requirement IIRC).
> 2.) We could add json_parser.hpp (and its required headers) to the boost
> subset in libmesh.  I'm hesitant to do this, though, since we are not
> actually using it in the library anywhere.
> 3.) You could keep using an older version of libmesh that still works with
> this app
> 4.) You could build and install a new (>=1.57) version of boost somewhere
> on your system and use that instead, ignoring the Ubuntu-provided one.
>
> I guess none of these is really ideal, but that is one of the pitfalls of
> relying on Boost I guess...
>


OK, thanks for your comments. That all makes sense.

For now I removed the boost dependency in my app (it turns out I didn't
really need the JSON parser in this case), so this issue isn't urgent for
me anymore.

In the future I'll plan to update to a newer version of boost so that
--with-boost will work for me. That way I should be able to use all of
boost in my apps (not just libMesh's subset of boost).

Thanks,
David
------------------------------------------------------------------------------
Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
Francisco, CA to explore cutting-edge tech and listen to tech luminaries
present their vision of the future. This family event has something for
everyone, including kids. Get more information and register today.
http://sdm.link/attshape
_______________________________________________
Libmesh-users mailing list
Libmesh-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-users

Reply via email to