Boost logo

Boost Users :

Subject: [Boost-users] __MINGW32_MAJOR_VERSION confusing, and causing problems with boost thread
From: Florian Burkart (florian.burkart_at_[hidden])
Date: 2012-11-01 10:04:01


Hi,

__MINGW32_MAJOR_VERSION is confusing me at the moment. Where is it coming
from? What does it stand for?

Even though my compiler at the moment informs me of

PS C:\Sys\boost\boost_1_50_0> g++ --version
g++.exe (GCC) 4.6.3 20111208 (prerelease)

is is defined as 3 when boost compiles. __MINGW32_MINOR_VERSION is defined
as 11. I had to hard check that, no idea where those numbers are coming
from.

This leads to this statement from
boost_1_50_0\libs\thread\src\win32\tss_pe.cpp

#if defined(__MINGW64__) || (__MINGW32_MAJOR_VERSION >3) || \
    ((__MINGW32_MAJOR_VERSION==3) && (__MINGW32_MINOR_VERSION>=18))

evaluating to false and this

extern "C" const IMAGE_TLS_DIRECTORY32 _tls_used __attribute__
((section(".rdata$T"))) =

to compile in, which in turn produces

c:/mingw-4.6.1/bin/../lib/gcc/mingw32/4.6.1/../../../libmingw32.a(tlssup.o):tlssup.c:(.tls+0x0):
multiple definition of `_tls_used'
/Sys/boost/MinGW32/boost_1_50_0/lib/libboost_thread-mgw46-mt-d-1_50.a(tss_pe.o):tss_pe.cpp:(.rdata$T+0x0):
first defined here

when trying to link to the static library. I fixed that by hacking the 18
in the source down to a 11 and recompiling boost with

PS C:\Sys\boost\boost_1_50_0> .\b2.exe
--prefix=c:\Sys\boost\MinGW32\boost_1_50_0 toolset=gcc address-model=32
link=static -s BZIP2_SOURCE=C:\Sys\bzip2-1.0.6 -s
ZLIB_SOURCE=C:\Sys\zlib-1.2.7 install

That seems to have solved my issue for now, but I don't know if my major or
minor versions are set incorrectly or whether this might a bug in the code
base?

Thoughts?
Florian



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