gpt4 book ai didi

c++ - 使用(自定义)GCC 4.x 或 5.x 时,Boost 构建无法通过 C++11 功能检查

转载 作者:可可西里 更新时间:2023-11-01 17:25:03 26 4
gpt4 key购买 nike

我需要在 Fedora 24 机器上构建 Boost 1.62 和 1.63,但使用 GCC 4.9.3 或 GCC 5.4.0(取决于 CUDA 版本,这就是我需要旧编译器的原因)。但是如果我按照 this answer 中的描述设置自定义 GCC 版本并运行

/b2 --toolset=gcc-5.4.0 stage

令我懊恼的是,我现在看到了:

    - 32-bit                   : no
- 64-bit : yes
- arm : no
- mips1 : no
- power : no
- sparc : no
- x86 : yes
- symlinks supported : yes
- C++11 mutex : no
- lockfree boost::atomic_flag : yes
- Boost.Config Feature Check: cxx11_auto_declarations : no
- Boost.Config Feature Check: cxx11_constexpr : no
- Boost.Config Feature Check: cxx11_defaulted_functions : no
- Boost.Config Feature Check: cxx11_final : yes
- Boost.Config Feature Check: cxx11_hdr_tuple : no
- Boost.Config Feature Check: cxx11_lambdas : no
- Boost.Config Feature Check: cxx11_noexcept : no
- Boost.Config Feature Check: cxx11_nullptr : no
- Boost.Config Feature Check: cxx11_rvalue_references : no
- Boost.Config Feature Check: cxx11_template_aliases : no
- Boost.Config Feature Check: cxx11_thread_local : no
- Boost.Config Feature Check: cxx11_variadic_templates : yes

即许多 C++11 特性应该缺失,但实际上它们不应该缺失。使用发行版的 GCC 版本 (6.2.1) 构建它时不会发生这种情况。

为什么会发生这种情况?我应该怎么做才能使 Boost 构建识别我的 GCC 5.4.0(或 4.9.3)的功能?

最佳答案

以下解决方案已使用 Boost 1.62.0 + GCC 4.x、Boost 1.62.0 + GCC 5.x 和 Boost 1.65.1 + GCC 5.x 进行了测试。 YMMV 与其他 Boost 版本,但我看不出它为什么不能工作。

为了这个例子,我们假设:

  • 您想使用 GCC 5.4 构建 Boost
  • g++ 5.4 二进制文件位于 /some/where/g++-5.4
  • 您已经下载了 Boost 源并将它们解压到 /path/to/sources/of/boost-1.62.0/
  • (也许)您想将 Boost 安装到 /dest/path
  • 您有 N 个核心(因此您希望以 N 种方式并行构建)

现在:

  1. (可选:确保您拥有 Boost 喜欢的库,例如:zlibbzip2lzmazstdiconvicu)
  2. cd /path/to/sources/of/boost-1.62.0/
  3. 通过运行 ./bootstrap.sh 来 boost 构建系统
  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 是您系统上的内核数)
  6. ./b2 install --prefix=/dest/path

注意事项:

  • 操作 2 和 3 的顺序无关紧要。
  • 高兴! GCC 6.x 或更高版本不会发生这种情况。
  • 你可以替换c++11c++1y如果你想要 GCC 5.4.0(未最终确定)的 C++14 支持。如果您使用不同的 GCC 版本,请记住,在标准最终确定之前,您实际上并没有获得它的可用开关。因此 C++11 曾经表示 --std=c++1x C++17 是 --std=c++1z随着 GCC 版本在标准定稿后发布,开关也会发生变化。

关于c++ - 使用(自定义)GCC 4.x 或 5.x 时,Boost 构建无法通过 C++11 功能检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39826917/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com