【问题标题】:Compile c++14-code with g++用 g++ 编译 c++14 代码
【发布时间】:2015-11-05 01:46:54
【问题描述】:

我在 Ubuntu 14.04 LTS 上使用 g++ 4.8.4。尝试使用 '-std=c++14' 进行编译时,出现此错误:

g++: error unrecognized command line option '-std=c++14'

使用 '-std=c++11' 编译可以正常工作,所以我不确定发生了什么。 g++ 真的不支持 c++14 吗?我是否使用了错误的命令行选项?

我使用了“sudo apt-get install g++”,它应该会自动检索最新版本,对吗?

【问题讨论】:

  • 你需要使用-std=c++1y它改为-std=c++14我认为5.2
  • 你最好将你的GCC编译器升级到4.9或5。

标签: c++ g++ ubuntu-14.04 c++14


【解决方案1】:

gcc 4.8.4后面的版本需要使用-std=c++1y,貌似5.2开头可以使用-std=c++14

如果我们查看 gcc online documents,我们可以找到每个 gcc 版本的手册,我们可以转到 Dialect options for 4.9.3 下的 GCC 4.9.3 manual 看到它说:

‘c++1y’

ISO C++ 标准的下一个修订版,暂定于 2014 年发布。支持是高度实验性的,并且几乎肯定会在未来版本中以不兼容的方式发生变化。

所以在4.9.3 之前你必须使用-std=c++1ygcc 5.2 options 说:

‘c++14’ ‘c++1y’

2014 ISO C++ 标准加上修订。不推荐使用名称“c++1y”。

我不清楚为什么它会列在Options Controlling C Dialect 下,但这是当前文档的组织方式。

【讨论】:

  • 请注意,在 gcc 4.8 中,这只增加了对普通函数的返回类型推导的支持。许多其他功能直到 4.9 或 5 才添加,详细说明 here
【解决方案2】:

GCC 4.8 不支持-std=c++14 标志。如果您想使用 C++14 功能,您需要使用 -std=c++1y 进行编译。使用godbolt.org 似乎支持-std=c++14 的最早版本是GCC 4.9.0 或Clang 3.5.0

【讨论】:

    【解决方案3】:

    G++ 确实通过-std=c++14-std=c++1y 支持C++14。后者是该标准的通用名称,在它将于哪一年发布之前是已知的。在较旧的版本(包括您的版本)中,仅接受后者,因为发布年份尚不知道这些版本何时发布。

    我使用了“sudo apt-get install g++”,它应该会自动检索最新版本,对吗?

    它会安装 Ubuntu 存储库中可用的最新版本,而不是现有的最新版本。

    最新的 GCC 版本是 5.2。

    【讨论】:

    • I used "sudo apt-get install g++" which should automatically retrieve the latest version, is that correct? 它安装最新的point release 无论哪个主要版本 Ubuntu/Debian 存储库已选择将其视为默认值,不合格版本。通常有多个包可用于不同的版本,包括更新的主要版本——在这种情况下,我们必须明确指定我们想要一个非默认的主要版本,例如sudo aptitude install g++-6 就像我最近在 Debian 不稳定时所做的那样。刚才在刚才命名为g++的包中默认的是5.x版本。
    【解决方案4】:

    按照https://gist.github.com/application2000/73fd6f4bf1be6600a2cf9f56315a2d91 的说明在 Ubuntu 14.04 上设置您需要的 gcc 版本 - gcc 5 或 gcc 6。说明包括配置 update-alternatives 以允许您根据需要在版本之间切换。

    【讨论】:

    • ( 任何想要评论“用代码而不是链接回答”的人请注意:gist.github.com/application2000/… 是 application2000 的工作,不是我的,所以我无法声称这是我的答案。但是我可以向人们展示在哪里可以获得比我涉足的 5 个单独的 stackoverflow 问题更有用的说明。)
    猜你喜欢
    • 2020-02-16
    • 2015-10-02
    • 2011-09-16
    • 1970-01-01
    • 2020-03-07
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多