Boost build fails C++11 feature checks when using (custom) GCC 4.x or 5.x

前端 未结 2 1418
南旧
南旧 2020-12-31 18:50

I need to build Boost 1.62 and 1.63 on a Fedora 24 machine, but using GCC 4.9.3 or GCC 5.4.0 (depending on the version CUDA, which is the reason why I need an older compiler

相关标签:
2条回答
  • 2020-12-31 19:26

    The following solution was tested with Boost 1.62.0 + GCC 4.x, Boost 1.62.0 + GCC 5.x and Boost 1.65.1 + GCC 5.x. YMMV with other Boost versions but I see no reason why it shouldn't work.

    Let's assume for the sake of this example that:

    • You want to build Boost with GCC 5.4
    • The g++ 5.4 binary is at /some/where/g++-5.4
    • You've downloaded the Boost sources and unpacked them into /path/to/sources/of/boost-1.62.0/
    • (Perhaps) you want to install Boost to /dest/path
    • You have N cores (so you want to parallelize the build N-ways)

    Now:

    1. (Optional: Make sure you have the libraries Boost likes to have, e.g.: zlib, bzip2, lzma, zstd, iconv, icu)
    2. cd /path/to/sources/of/boost-1.62.0/
    3. Booststrap the build system by running ./bootstrap.sh
    4. echo "using gcc : 5.4 : /the/path/to/g++-5.4 : <cxxflags>-std=c++11 ;" > ./tools/build/src/user-config.jam
    5. ./b2 --toolset=gcc-5.4 -j N (N being the number of cores on your system)
    6. ./b2 install --prefix=/dest/path

    Notes:

    • The order of actions 2 and 3 doesn't matter.
    • Rejoice! This doesn't happen with GCC 6.x or later versions.
    • You can replace c++11 with c++1y if you want GCC 5.4.0's (non-finalized) C++14 support. If you're using a different GCC version, remember that before a standard is finalized you don't actually get its switch available. Thus C++11 used to mean --std=c++1x and C++17 was --std=c++1z and the switches change as GCC versions get released after standard finalization.
    0 讨论(0)
  • 2020-12-31 19:31

    I'm having the same issue.

    It seems that, because you are cross-compiling, the boost building system is trying to check if your compiler supports all of those c++11 features. The thing is, in order to do that, the build system compiles a sheet of code. One of those files is this: boost_1_62_0/libs/rational/test/constexpr_test.cpp

    Then, the build system does what no one would think when using a cross-compiler... it tries to execute the resultant binary on the host computer... It obviously fails. That is happening for all of those cxx11_ tests. I'm also having that issue and it is a problem. Because of this, I'm unable to build Boost.Fiber for my Raspberries with OpenWRT.

    0 讨论(0)
提交回复
热议问题