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@lists.boost.org [mailto:boost-users-bounces@lists.boost.org] On Behalf Of Vladimir Prus
Sent: Friday, December 31, 2010 1:34 AM
To: boost-users@lists.boost.org
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@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users