【问题标题】:Why does GCC not seem to have the filesystem standard library?为什么 GCC 似乎没有文件系统标准库?
【发布时间】:2018-02-02 16:14:01
【问题描述】:

我遇到了文件系统库的问题,它应该包含在 c++17 编译器中,两天后我尝试在树莓派中安装 gcc-7.0.2 但它不起作用,它不能识别命令 gcc-7 或 g++-7 甚至 -std=c++17 所以我必须使用 apt-get install 安装 g++-6 和 gcc-6 无论如何,安装 6 版本后,编译器包括 c++17。 我使用代码块作为 IDE,我必须添加一个新的编译器并添加选项 -std=c++17 来启用它,但是在主代码中,当我包含文件系统库时,它说没有这样的文件或目录。

我的问题是,如何正确添加 c++17 编译器及其库(如文件系统)??

【问题讨论】:

  • 开关说“C++17”并不意味着它实现了C++17的全部
  • 更具体地说,它只能实现语言部分。 library 部分超出了编译器的权限。
  • @IgnacioVazquez-Abrams:编译器开关也用于激活库部件,因为它们包含在发行版中的编译器中。但是你说得对,libstdc++ 是与 gcc 分开更新的。
  • @Nicol 它根本没有单独更新:特定的 GCC 版本与特定的 libstdc++ 快照非常紧密地绑定在一起。版本编号的工作方式略有不同,两者都是半独立开发的(编译器中的语言功能实现允许)。
  • @Rick 你可能会有两个,即使新的应该可以替代旧的。

标签: c++ gcc raspberry-pi c++17 gcc6


【解决方案1】:

首先你应该看看C++17 Support in GCC

GCC 8

运行时库 (libstdc++)

  • 改进了对 C++17 的实验性支持,包括以下功能:
    • 支持类模板参数推导的推导指南。
    • std::filesystem 实现。
    • std::char_traits<char>std::char_traits<wchar_t> 可用于常量表达式。
    • std::to_charsstd::from_chars(仅适用于整数,不适用于浮点类型)。

src:https://gcc.gnu.org/gcc-8/changes.html

GCC 9

运行时库 (libstdc++)

  • 改进了对 C++17 的支持,包括:
    • C++17 实现不再是实验性的。
    • 并行算法和<execution>(需要 Thread Building Blocks 2018 或更高版本)。
    • <memory_resource>
    • 现在使用<filesystem> 中的类型和函数不需要与-lstdc++fs 链接。

src:https://gcc.gnu.org/gcc-9/changes.html

【讨论】:

    【解决方案2】:

    GCC v7 仍然没有实现<filesystem>,但它确实有<experimental/filesystem> 中的文件系统技术规范

    #include <experimental/filesystem>
    
    // for brevity
    namespace fs = std::experimental::filesystem;
    
    int main()
    {
        fs::path p = "/path/to/my/file"; // etc...
    }
    

    GCC v6 也提供此功能。

    要与库链接,您需要将-lstdc++fs 添加到命令行。

    注意:当前的技术规范与标准委员会决定的<filesystem> 的最终草案之间可能存在一些细微差别。

    注意 2: GCC v8 现在使用 -std=c++17 标志实现 <filesystem>

    【讨论】:

    • 所以gcc v7还没有完成是对的,无论如何,添加实验/文件系统工作正常,谢谢。
    • @shadow 对C++17 的支持不完整,不。主要是因为C++17 尚未被 ISO 标准委员会最终确定。 GCC 可能需要几个月的时间才能完成功能。
    • @Galik 为什么在 C++17 发布时 GCC 的功能还不完整? C++17 草案已经功能完善好几个月了,如果我正在阅读 standardization process 对,它要到 some time after October 30th 才会发布。这应该是足够的时间,因为他们是done with the core languagemostly done with the library
    • @DanielH 根据记录,std::filesystem 直到v8.1 才到达GCCMay 2018 发布在 6 个多月后 C++17 Standard 已发布。即便如此,在GCC v9.1 发布于May 2019 之前,它仍被认为是“实验性”
    • 我在 Ubuntu 20.04 上使用 GCC 9.3 并且 &lt;filesystem&gt; 不起作用(即使使用 -std=c++17 标志)。由于这个答案,使用实验有效。
    猜你喜欢
    • 2017-04-15
    • 2020-07-31
    • 1970-01-01
    • 2023-03-25
    • 2021-09-24
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    相关资源
    最近更新 更多