【问题标题】:Switch default c++ library from std=c++14 to std=c++17 on ubuntu在 ubuntu 上将默认 c++ 库从 std=c++14 切换到 std=c++17
【发布时间】:2021-09-18 07:16:57
【问题描述】:

我试图在需要 c++17 或更新库的 ubuntu 上安装一个包。 我安装了 gcc-10 和 g++-10。我还发现默认的 c++ 库是 c++14 通过使用这段代码:

man g++ | grep "This is the default for C++ code"

但我不知道如何将其更改为其他版本。 要运行一个简单的代码,我们可以使用-std=c++17。但我认为安装包需要更改默认库。

【问题讨论】:

  • "ubuntu 上需要 c++17 或更新版本的包"你是怎么确定的?
  • 你默认安装的是哪个版本的gcc?
  • @HolyBlackCat 编译器给出了一个错误,“string_view”在 c++17 中有效
  • @n.1.8e9-where's-my-sharem。起初它是 gcc-9,但我通过使用 update-alternatives 将其更改为 gcc-10
  • 试试make CXXFLAGS=-std=c++17,你不需要编辑makefile。

标签: c++ c++17 libstdc++


【解决方案1】:

传统上,c++ 标准库是编译器的一部分。在 GNU/Linux 系统上,GCC 通常与其标准库一起使用。另一种选择是 CLang。

请注意,标准版本不仅涉及库,还涉及需要由编译器直接实现的语言功能。

每个编译器版本都有一个默认标准版本,但支持多个。 在编译期间选择特定标准版本的正确方法是通过编译器标志。如果软件依赖于特定版本,这应该是软件构建系统的一部分。

编译器标志可以在环境变量中设置,例如CXXFLAGS。然后,它们会被流行的构建助手(如 GNU Make 或 CMake)识别。由于要使用的标准版本与要编译的软件密切相关,因此将标准版本放入环境中并不是一个好习惯。

但是,如果多个软件使用不同的标准版本构建,会不会有问题?一点都不。即使将它们链接在一起,ABI 兼容性也是跨标准给出的。有关该主题的详细答案,请参阅 https://stackoverflow.com/a/49119902/21974

请注意,您在 Ubuntu 中安装的软件包都是预编译的,因此您无法控制它们的编译方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    相关资源
    最近更新 更多