【问题标题】:Compile with c++17 mac用c++17 mac编译
【发布时间】:2018-07-04 20:08:02
【问题描述】:

我无法用 -std=c++17 编译,我得到了:

error: invalid value 'c++17' in '-std=c++17'

但是我更新了 Xcode 和 clang。

我的 Clang 版本是:

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 9.0.0 (clang-900.0.39.2)
Target: x86_64-apple-darwin16.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin`

并且我加载了可选的最新标题,我必须这样做

 #include <experimental/optional>

而不是

 #include <optional>

【问题讨论】:

  • 试试 -std=c++17 或 -std=c++1z
  • @manni66 抱歉打错了,我更正了
  • 你的问题是什么?
  • @n.m.如何使用 -std=c++17 进行编译
  • Apple 发布的编译器太旧,无法支持此标志。您可能需要切换到 Apple 未提供的 llvm/clang 版本。

标签: c++ macos gcc g++ clang++


【解决方案1】:

Xcode 自带完整的工具链,包括头文件和实际的编译器。

Apple LLVM version 9.0.0 (clang-900.0.39.2)(Xcode 9.2 附带)不支持使用标志 -std=c++17,因为它太旧了。可选标头仅包含在文件夹experimental/ 下。这就是为什么你需要#include &lt;experimental/optional&gt;

要使用 Xcode 9.2 附带的编译器编译支持 c++17 的程序,您需要使用 -std=c++1z 标志。

Xcode 9.3 将附带Apple LLVM version 9.1.0 (clang-902.0.30),它支持-std=c++17 标志。然而,optional 标头截至今天仍在experimental/ 子目录下。这可能会在测试期间发生变化。

【讨论】:

    【解决方案2】:

    这是我通过这些测试得到的结果:

    #include <experimental/optional>
    
    
    int main(int, char* []) {
        return 0;
    }
    
    g++ -std=c++17 -o test test.cpp
    error: invalid value 'c++17' in '-std=c++17'
    g++ -std=c++1z -o test test.cpp
    

    您尝试过 c++1z 参数吗? 另外值得注意的是,我的测试编译时没有提供 -std=c++1z 参数。

    我认为我使用的 OSX 版本比你更新:

    Target: x86_64-apple-darwin17.4.0
    

    【讨论】:

    • 是的,但我不能写包含实验性/可选我只需要包含可选的,但是使用 c++1z 我可以编译,然后我会更新
    【解决方案3】:

    您应该使用-std=c++1z 作为标志。

    【讨论】:

      【解决方案4】:

      自 macOS 15 起支持 c++17 的 libc++

      【讨论】:

        【解决方案5】:

        -std=c++1z 也适用于 Apple LLVM 版本 8.1.0 (clang-802.0.42)

        【讨论】:

          猜你喜欢
          • 2020-07-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-17
          • 2019-07-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多