【问题标题】:how to use std::filesystem on gcc 8?如何在 gcc 8 上使用 std::filesystem?
【发布时间】:2019-04-11 14:56:02
【问题描述】:

我已经更新了 gcc 版本,gcc --version 产生以下输出

    gcc (Ubuntu 8.1.0-5ubuntu1~16.04) 8.1.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

我可以在头文件中包含文件系统而不会出现任何错误

#include<filesystem>

但是当我尝试像下面那样访问命名空间文件系统时,我得到了错误

namespace fs = std::filesystem;

错误信息

error: ‘filesystem’ is not a namespace-name
 namespace fs = std::filesystem;

这似乎很奇怪,因为 gcc 8 支持 std::filesystem 并且它在命名空间中不可用,我在访问 std::filesystem 时做错了吗?

是的,我是用 -std=c++17 构建的

【问题讨论】:

  • 你是用-std=c++17 构建的吗(毕竟是C++17的特性)?
  • 你是用-std=c++17还是-std=gnu++17编译?
  • 是的,我用 -std=c++17 构建
  • @Tas 是关于 gcc v7,gcc v8 已经支持 std::filesystem

标签: c++ gcc namespaces


【解决方案1】:

将文件系统库添加为编译器的参数,该编译器将被转发到链接器。还要确保您使用的是 C++17。 g++ 和 clang++ 都接受这种特殊格式:

--std=c++17 -lstdc++fs

【讨论】:

  • 它没有用,我在上一个回复时不小心删除了命名空间行,但我仍然得到同样的错误。
  • 好吧,链接可能会起作用,但您会被一些问题所阻碍,这些问题甚至无法让您走得那么远。在std::filesystem @ cppreference 上尝试一些文件系统示例,如果不起作用,只需编辑问题。
  • @Naveen 你有没有弄清楚哪里出了问题?这个旧答案仍然得到支持,所以它似乎对其他人有所帮助:-)
  • 只要 C++17 或更高版本不是编译器使用的默认版本,就需要 @jrh --std=c++17--std=c++&lt;any version after c++17&gt;,因此这不足为奇。 &lt;filesystem&gt; 实现的哪一部分在g++ 中不完整?
  • @jrh C++17 语言支持可能不是 100%,但相关的是标准 library 实现的状态。似乎 gcc 8 有 non-conforming basic_fstream path overloads 但我不确定 gcc 9 或更高版本是否是这种情况。
【解决方案2】:

由于愚蠢的代表系统,我无法对 slashmais 的回答发表评论。

在使用 IDE 时,请确保您还将使用的编译器设置为 GCC8 或更高版本。

在我的情况下,尽管安装了 CodeLite,但它使用的是较低版本的 GCC 并引起了头痛(re: not find the header)!

手动将 CodeLite 设置为使用 gcc-8(而不仅仅是 gcc 解决了这个问题。

【讨论】:

  • 为缩短我们都讨厌的悲惨的低于 100 的过渡期而努力。 ;)
【解决方案3】:

如果您使用的是 IDE,例如代码块,请确保设置了 gcc 的默认编译器标志:-std=c++17,而不仅仅是当前项目的,而是全局标志。

CB 有这个问题并在 [Settings/Compiler] 下设置此标志修复它(无需添加库)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 2020-11-04
    • 1970-01-01
    • 2017-08-18
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多