From: Jonathan Wakely (cow_at_[hidden])
Date: 2004-05-10 06:17:57
On Mon, May 10, 2004 at 12:14:59PM +0200, Christoph Ludwig wrote:
> The problem turns out to be that gcc 3.4 defines the preprocessor
> variable _REENTRANT if certain standard library headers are included
> even if the compiler is *not* called with the '-pthread' command line
I believe this is only when GCC is configured with posix threads
(either explicitly with --enable-threads=posix, or implicitly on POSIX
systems where the default threading model is pthreads).
If you explicitly configure with --enable-threads=single (or the
equivalent --disable-threads) then _REENTRANT won't be defined, and
boost/config.hpp correctly detects that threads are disabled.
This doesn't help solve your problem, of course.
> The following test exhibits this behavior and shows that it
> causes BOOST_HAS_THREADS to be erroneously defined in
> boost/config/suffix.hpp if, e.g., the standard header string is
> I have no idea what the gcc developers recommend in order to detect
> multi-threading support or if this should be reported to the gcc
> developers as a bug. But it will certainly break many programs using
I've been meaning to get around to asking that on the gcc list.
Unfortunately gcc.gnu.org seems to be down today.
GCC provides the inline __gthread_active_p() to tell if if the program
is linked to the pthread library, but I don't know how to give the same
info to the preprocessor at compile time.
> A user can work around this problem by either including
> boost/config.hpp before any other headers (even Boost headers since
> boost/lexical_cast.hpp, for example, includes string before
> boost/config.hpp). Or the user builds everything with MT-support, even
> if the program itself is single threaded. Neither workaround is
Or (as I've been doing) explicitly defining BOOST_DISABLE_THREADS when
you know your program is single threaded.
> PS: FWIW, I could trace back the problem to a change in
> include/c++/i686-pc-linux-gnu/bits/gthr-default.h. This change was
> discussed in
FWIW the google cache version of that is here: http://tinyurl.com/2xksr
-- "He who joyfully marches to music in rank and file has already earned my contempt. He has been given a large brain by mistake, since for him the spinal cord would fully suffice." - Albert Einstein
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk