Boost logo

Boost Users :

Subject: Re: [Boost-users] Mingw64 Boost Threads Build
From: Dustin T. Clifford (DClifford_at_[hidden])
Date: 2011-01-04 11:37:14


Volodya,



Thank you for your response. You are correct in that the cited error was not verbatim. I tried to attach the build log but, unfortunately, it was too large for the thread.



I have updated 'user-config.jam' in 'build/v2/'. Below is the gcc definition:



      using gcc : 3.2 : x86_64-w64-mingw32-g++



I have run the build using './bjam.exe -a address-model=64 --prefix=<output dir> --with-thread install'. Unfortunately, I get a casting error (see below).



      gcc.compile.c++ bin.v2\libs\thread\build\gcc-mingw-3.2\debug\address-model-64\link-static\threading-multi\win32\thread.o

       In file included from ./boost/thread/win32/basic_timed_mutex.hpp:14:0,

                 from ./boost/thread/win32/mutex.hpp:8,

                 from ./boost/thread/mutex.hpp:14,

                 from ./boost/thread/detail/thread.hpp:13,

                 from ./boost/thread/thread.hpp:22,

                 from libs\thread\src\win32\thread.cpp:10:

       ./boost/thread/win32/interlocked_read.hpp: In function ‘void boost::detail::interlocked_write_release(void* volatile*, void*)’:

       ./boost/thread/win32/interlocked_read.hpp:71:13: error: cast from ‘void*’ to ‘long int’ loses precision

       In file included from ./boost/thread/win32/mutex.hpp:8:0,

                 from ./boost/thread/mutex.hpp:14,

                 from ./boost/thread/detail/thread.hpp:13,

                 from ./boost/thread/thread.hpp:22,

                 from libs\thread\src\win32\thread.cpp:10:

       ./boost/thread/win32/basic_timed_mutex.hpp: In member function ‘void* boost::detail::basic_timed_mutex::get_event()’:

       ./boost/thread/win32/basic_timed_mutex.hpp:183:43: error: cast from ‘void*’ to ‘long int’ loses precision

       In file included from ./boost/thread/once.hpp:14:0,

                 from libs\thread\src\win32\thread.cpp:17:

       ./boost/thread/win32/once.hpp: In function ‘void boost::call_once(boost::once_flag&, Function)’:

       ./boost/thread/win32/once.hpp:136:20: error: ‘_InterlockedCompareExchange’ is not a member of ‘boost::detail’

       ./boost/thread/win32/once.hpp:152:25: error: ‘_InterlockedIncrement’ is not a member of ‘boost::detail’

       ./boost/thread/win32/once.hpp:155:21: error: ‘_InterlockedExchange’ is not a member of ‘boost::detail’

       ./boost/thread/win32/once.hpp:169:21: error: ‘_InterlockedExchange’ is not a member of ‘boost::detail’

       ./boost/thread/win32/once.hpp:184:17: error: ‘_InterlockedIncrement’ is not a member of ‘boost::detail’



"x86_64-w64-mingw32-g++" -ftemplate-depth-128 -O0 -fno-inline -Wall -g -mthreads -m64 -Wno-long-long -DBOOST_ALL_NO_LIB=1 -DBOOST_THREAD_BUILD_LIB=1 -I"." -c -o "bin.v2\libs\thread\build\gcc-mingw-3.2\debug\address-model-64\link-static\threading-multi\win32\thread.o" "libs\thread\src\win32\thread.cpp"



       ...failed gcc.compile.c++ bin.v2\libs\thread\build\gcc-mingw-3.2\debug\address-model-64\link-static\threading-multi\win32\thread.o...

...skipped <pbin.v2\libs\thread\build\gcc-mingw-3.2\debug\address-model-64\link-static\threading-multi>libboost_thread-mgw32-mt-d-1_45.a(clean) for lack of <pbin.v2\libs\thread\build\gcc-mingw-3.2\debug\address-model-64\link-static\threading-multi>win32\thread.o...

...skipped <pbin.v2\libs\thread\build\gcc-mingw-3.2\debug\address-model-64\link-static\threading-multi>libboost_thread-mgw32-mt-d-1_45.a for lack of <pbin.v2\libs\thread\build\gcc-mingw-3.2\debug\address-model-64\link-static\threading-multi>win32\thread.o...

...skipped <p\cygdrive\c\Users\cliffodt\tmp\boost-1.45.0\lib>libboost_thread-mgw32-mt-d-1_45.a for lack of <pbin.v2\libs\thread\build\gcc-mingw-3.2\debug\address-model-64\link-static\threading-multi>libboost_thread-mgw32-mt-d-1_45.a...

       ...failed updating 2 targets...

       ...skipped 6 targets...



I have an MSVC build of boost but when I perform a build against this using our GCC build I get the errors below. I do not get these errors with other libraries build with MinGW64. Do you have any insight into this? I’m wondering if it’s a mangling issue.



Isdmain.o:Isdmain.cpp:(.text+0x16c3): undefined reference to `boost::thread::start_thread()'

Isdmain.o:Isdmain.cpp:(.text+0x9982): undefined reference to `boost::thread::~thread()'

Isdmain.o:Isdmain.cpp:(.text+0x9d1a): undefined reference to `boost::thread::~thread()'

Isdmain.o:Isdmain.cpp:(.text+0x9dee): undefined reference to `boost::thread::~thread()'

Isdmain.o:Isdmain.cpp:(.text+0x9e65): undefined reference to `boost::thread::~thread()'

Isdmain.o:Isdmain.cpp:(.text+0xbbc3): undefined reference to `boost::thread::start_thread()'

Isdmain.o:Isdmain.cpp:(.text+0xbc7e): undefined reference to `boost::thread::~thread()'

Isdmain.o:Isdmain.cpp:(.text+0xbc96): undefined reference to `boost::thread::~thread()'

Isdmain.o:Isdmain.cpp:(.text+0xca96): undefined reference to `boost::thread::~thread()'

Isdmain.o:Isdmain.cpp:(.text+0xe23a): undefined reference to `boost::thread::thread()'

Isdmain.o:Isdmain.cpp:(.text+0xe252): undefined reference to `boost::thread::thread()'

Isdmain.o:Isdmain.cpp:(.text+0x10): undefined reference to `boost::thread::~thread()'

Isdmain.o:Isdmain.cpp:(.text+0x30): undefined reference to `boost::thread::~thread()'

Isdmain.o:Isdmain.cpp:(.text$_ZN5boost6threadaSENS_6detail13thread_move_tIS0_EE[boost::thread::operator=(boost::detail::thread_move_t<boost::thread>)]+0x131): undefined reference to `boost::thread::~thread()'





I received a patch this weekend that is said to allow for building boost under MinGW. I am going to try this and see what I get.



Thanks for all your help and I would greatly appreciate any more input you may have.



Dustin



-----Original Message-----
From: boost-users-bounces_at_[hidden] [mailto:boost-users-bounces_at_[hidden]] On Behalf Of Vladimir Prus
Sent: Friday, December 31, 2010 1:34 AM
To: boost-users_at_[hidden]
Subject: Re: [Boost-users] Mingw64 Boost Threads Build



Dustin T. Clifford wrote:



> Good Afternoon,

>

> We have been using boost-threads for our native APIs and, thus far, Boost has been a godsend! We

> had a recent request to build a 64-bit version of this API. To accomplish this we have attempted

> to build using MinGW64. Unfortunately, I have had zero luck getting boost-threads to build. I can

> build the 32-bit address model without a problem but 64-bit continues to elude me.

>

> I first tried Boost 1.35.0 and have now moved on to 1.45.0. I believe that the environment is set

> up correctly (see below). This build is being performed on a Windows 7 64-bit using MinGW64 from

> Cygwin.

>

> export CC=x86_64-w64-mingw32-gcc.exe

> export CXX=x86_64-w64-mingw32-g++.exe

> export LD=x86_64-w64-mingw32-ld.exe



I don't think this environment variables have any effect on Boost.Build.



> I have, also, modified my PATH to use the appropriate 64-bit bintools and aliased gcc, g++ and ld

> to the 64-bit MinGW64 compilers and linkers.

>

> To build Boost I have used the following with no success.

>

> boostrap.sh address-model=64 -prefix=<install> --with-libraries=thread; bjam -a install;

> boostrap.sh -prefix=<install> --with-libraries=thread; bjam -a address-model=64 install;

> boostrap.sh -prefix=<install> --with-libraries=thread; bjam -a install;

>

> The last build attempt succeeds but appears to have built 32-bit binaries. The previous two fail

> in building boost-threads complaining that 'address-model-64' is not found for certain build

> artifacts.



Sadly, I don't quite understand what emits the above error message, and I'm not sure this

is 100% verbatim error message either.



> I have, also, tried the above with a prebuilt bjam with the same results.

>

> I have tried much more than what I have cited here (including MSVC builds)



MSVC is surely the easiest. Just type:



      bjam --with-thread address-model=64 toolset=msvc install



If you have one version of MSVC and it's installed in default paths, this should work

without any configuration.



For mingw, the right command line would be



      bjam --with-thread address-model=64 toolset=gcc install



However, you would have to setup user-config.jam to point to the right gcc (mingw one,

not cygwin one, at in the right location). See:



  http://www.boost.org/boost-build2/doc/html/bbv2/overview/configuration.html

  http://www.boost.org/boost-build2/doc/html/bbv2/reference/tools.html#bbv2.reference.tools.compiler.gcc



- Volodya





_______________________________________________

Boost-users mailing list

Boost-users_at_[hidden]

http://lists.boost.org/mailman/listinfo.cgi/boost-users



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