|
Boost : |
From: Jonathan Wakely (cow_at_[hidden])
Date: 2004-09-27 04:47:51
On Mon, Sep 27, 2004 at 01:17:12PM +0900, Rob wrote:
> Hello,
>
> I'm not a boost expert, but I'm using LyX, which has boost (version 1.31.0)
> included in its source code.
>
> I have FreeBSD (4.10) and use gcc 3.4.2. When I compile LyX, I get
> an error from boost:
>
> [...]
> ../../boost/boost/lexical_cast.hpp:102: error: `wstring' is not a member of
> `std'
> ../../boost/boost/lexical_cast.hpp:102: error: `wstring' is not a member of
> `std'
> ../../boost/boost/lexical_cast.hpp:103: error: template argument 1 is
> invalid
> ../../boost/boost/lexical_cast.hpp:103: error: explicit specialization of
> non-template `<type error>'
> ../../boost/boost/lexical_cast.hpp:162: error: declaration of `operator>>'
> as non-function
> ../../boost/boost/lexical_cast.hpp:162: error: expected `;' before '(' token
> ../../boost/boost/lexical_cast.hpp:168: error: expected `;' before "private"
>
>
> When I reported this to the LyX list, I was told to forward the problem
> to the boost list. There may be a problem here with FreeBSD, gcc 3.4.2 and
> boost. Any idea what is going on here?
FreeBSD's wchar_t support is limited, so GCC does not enable any
wide-char support in the C++ stdlib
All uses of wstring/char_t/wstream etc. are be guarded by
BOOST_NO_WSTRING so they aren't compiled on platforms without wchar
support in the stdlib. BOOST_NO_WSTRING will get set automatically
because the stdlib does not define _GLIBCXX_USE_WCHAR_T on FreeBSD.
However, Boost 1.31 was released before GCC 3.4.1, which changed the
stdlib macros from _GLIBCPP_blahblah to _GLIBCXX_blahblah and so Boost's
config fails to configure correctly for this compiler. You could try
taking the boost/config/stdlib/libstdcppv3.hpp header from CVS, but note
that there are additional problems with GCC 3.4.x and Boost due to GCC
3.4 unconditionally defining _REENTRANT. See GCC PR 11953 for details.
(I've written a summary of this issue, but it's sitting on my hard drive
at home somewhere. I need to send it to this list...)
In short, you must define either BOOST_DISABLE_THREADS or compile with
-pthreads to avoid linker errors from the pthread_xxx functions.
Hope that helps,
jon
-- First they came for the hackers. But I never did anything illegal with my computer, so I didn't speak up. Then they came for the pornographers. But I thought there was too much smut on the Internet anyway, so I didn't speak up. Then they came for the anonymous remailers. But a lot of nasty stuff gets sent from anon.penet.fi, so I didn't speak up. Then they came for the encryption users. But I could never figure out how to work PGP anyway, so I didn't speak up. Then they came for me. And by that time there was no one left to speak up.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk