Unable to build Boost libraries with GCC
Asked Answered
K

4

13

I am using Windows 7 64-bit, and want to compile the non-precompiled libraries (specifically, I need Filesystem) from the command line (I do not use MSVC). I have MinGW, but read on the Boost website that MSYS shell is not supported, so I'm trying to compile the libraries from the Windows command prompt.

First of all, running bootstrap.bat results in the following error:

Building Boost.Jam build engine 
'cl' is not recognized as an internal or external command, 
operable program or batch file. 

Failed to build Boost.Jam build engine. 
Please consult bjam.log for furter diagnostics. 

You can try to obtain a prebuilt binary from 

   http://sf.net/project/showfiles.php?group_id=7586&package_id=72941

Also, you can file an issue at http://svn.boost.org
Please attach bjam.log in that case. 

Plus, there is not bjam.log file anywhere in the boost_root directory.

Disregarding this error, and trying to run the downloaded bjam.exe file, I get another error:

c:/boost_1_45_0/tools/build/v2/build\configure.jam:145: in builds-raw
*** argument error
* rule UPDATE_NOW ( targets * : log ? : ignore-minus-n ? )
* called with: ( <pbin.v2\libs\regex\build\gcc-mingw-4.5.2\debug\address-model64\architecture-x86>has_icu.exe :  : ignore-minus-n : ignore-minus-q )
* extra argument ignore-minus-q
(builtin):see definition of rule 'UPDATE_NOW' being called
c:/boost_1_45_0/tools/build/v2/build\configure.jam:179: in configu
re.builds
c:/boost_1_45_0/tools/build/v2/build\configure.jam:216: in object(
check-target-builds-worker)@409.check

etc. with quite a lot of complaints. Setting the 'architecture' and 'address-model' options doesn't help.

Any suggestions?

@Andre

Following Andre's suggestion, I created minGW-bjam that was running for an hour and a half and built most of the libraries, but not the one I need at this moment: Filesystem. Trying to compile only Filesystem, specifying version 2 with define="BOOST_FILESYSTEM_VERSION=2" and --disable-filesystem3 does not help. I get the following error:

gcc.compile.c++ bin.v2\libs\filesystem\build\gcc-mingw-4.5.2\debug\v3\src\operations.o
In file included from ./boost/filesystem/v3/operations.hpp:24:0,
             from libs\filesystem\v3\src\operations.cpp:48:
./boost/filesystem/v3/config.hpp:16:5: error: #error Compiling Filesystem version 3 
file with BOOST_FILESYSTEM_VERSION defined != 3
libs\filesystem\v3\src\operations.cpp:647:26: warning: 
'<unnamed>::create_symbolic_link_api' defined but not used

"g++"  -ftemplate-depth-128 -O0 -fno-inline -Wall -g -DBOOST_ALL_NO_LIB=1 -
DBOOST_FILESYSTEM_DYN_LINK=1 -DBOOST_FILESYSTEM_VERSION=2 -DBOOST_SYSTEM_DYN_LINK=1  -
I"." -c -o "bin.v2\libs\filesystem\build\gcc-mingw-4.5.2\debug\v3\src\operations.o"  
"libs\filesystem\v3\src\operations.cpp"

etc. with a lot of ...failed statements.

Any hints here?

Kathiekathleen answered 14/3, 2011 at 13:51 Comment(0)
P
9

The bootstrap script assumes the msvc compiler is available. But you can build bjam by hand without the bootstrap script:

Step into the tools\build\v2\engine\src directory and call "build.bat mingw". It will create a bjam.exe. You can then put it in your %PATH% or perhaps in the root boost directory...

To be honest, I usually build bjam like this with the msvc compiler and use this "msvc-bjam" to build my mingw boost libraries.

Paymar answered 14/3, 2011 at 14:4 Comment(3)
Hi Andre, thanks a lot. That did it, although bjam.exe did not work with the 64-bit-specific flags. Cheers!Kathiekathleen
Just used MinGW64 for 64-bit-specific stuff. Bjam worked with the newest release.Morvin
Now ( boost v1.63) the directory is \tools\build\src\engine. The command is build.bat gcc. bjam.exe and b2.exe are in \tools\build\src\engine\bin.ntx86Yellows
S
29

It's easy. Just use "bootstrap.bat gcc" to select GCC

Sotos answered 22/12, 2011 at 11:24 Comment(1)
worked, but it is necessary to put "C:\MinGW\bin" inside of your PATH environmentvariable of Windows and restart beforehand, otherwise the gcc command is unknown.Kampmann
P
9

The bootstrap script assumes the msvc compiler is available. But you can build bjam by hand without the bootstrap script:

Step into the tools\build\v2\engine\src directory and call "build.bat mingw". It will create a bjam.exe. You can then put it in your %PATH% or perhaps in the root boost directory...

To be honest, I usually build bjam like this with the msvc compiler and use this "msvc-bjam" to build my mingw boost libraries.

Paymar answered 14/3, 2011 at 14:4 Comment(3)
Hi Andre, thanks a lot. That did it, although bjam.exe did not work with the 64-bit-specific flags. Cheers!Kathiekathleen
Just used MinGW64 for 64-bit-specific stuff. Bjam worked with the newest release.Morvin
Now ( boost v1.63) the directory is \tools\build\src\engine. The command is build.bat gcc. bjam.exe and b2.exe are in \tools\build\src\engine\bin.ntx86Yellows
K
2

So... the first part of the problem was solved by Andre's suggestion. The second part was solved by setting the variable BOOST_FILESYSTEM_VERSION to 3 everywhere (the error above complains about incompatibility with what is set in file user.hpp). Although this is not the default option for Boost 1.45 that I'm using, it's the only thing that works (i.e. bjam wants to compile version 3 no matter what). So now I have version 3 of the filesystem library, and version 2 for all others, but that doesn't seem to be an issue for the moment.

I do have a problem with using Boost with OpenCV and Eigen libraries, though... off to the next challenge ;)

Kathiekathleen answered 15/3, 2011 at 13:0 Comment(0)
J
0

Since I can't comment yet, I want to add that I ran

bootstrap mingw

to generate b2 properly and then

b2 --build-dir="c:\boost_release" toolset=gcc --build-type=complete "c:\boost_release\stage"

The includes will be located at your boost root folder (boost_1_58_00/boost) and your binaries at the specified build folder.

Jockey answered 22/5, 2015 at 13:58 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.