30

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

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

4

2 回答 2

64

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现在使用标志实现<filesystem> 。-std=c++17

于 2017-08-24T17:15:16.613 回答
1

首先你应该看看GCC 中的 C++17 支持

海湾合作委员会 8

运行时库 (libstdc++)

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

源代码:https ://gcc.gnu.org/gcc-8/changes.html

海合会 9

运行时库 (libstdc++)

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

源代码:https ://gcc.gnu.org/gcc-9/changes.html

于 2021-08-24T19:37:12.973 回答