用 c 17 mac 编译

新手上路,请多包涵

我不能用 -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>

原文由 Max0u 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 948
2 个回答

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

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

为了使用 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/ 子目录下。这可能会在测试期间发生变化。

原文由 p0fi 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

 #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

原文由 Dennis 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题