【问题标题】:How to enable filesystem.h or fix experimental/filesystem?如何启用 filesystem.h 或修复实验性/文件系统?
【发布时间】:2019-07-25 08:05:52
【问题描述】:

我必须为我的项目编写文件系统代码。我在工作中使用 Linux 和 Clion。我包含并尝试编译简单的代码,但有错误说没有引用 std::experimental::filesystem::create:directories。编译器默认是 c++(我试过 gcc 但也有错误)。我不能只包括,我不知道下一步该做什么。谁能帮帮我?

我希望通过 std::experimental::filesystem::create_directory("root) 创建目录

【问题讨论】:

  • 使用 gcc 尝试编译器选项 -lstdc++fs
  • @Vlad 是链接器选项,而不是编译器选项。

标签: c++ c++17 clion


【解决方案1】:

根据您的编译器、其标准库及其版本,您需要链接到单独的文件系统库:

  • 来自 6.x 和 7.x 的 GCC:#include <experimental/filesystem> 为您提供 std::experimental::filesystem,然后您必须与 -lstdc++fs 链接
  • GCC 8.x 和更新版本:#include <filesystem> 为您提供std::filesystem,然后您必须与-lstdc++fs 链接
  • Clang/libc++ 5.x 到 6.x:#include <experimental/filesystem> 为您提供 std::experimental::filesystem,然后您必须与 -lc++experimental 链接。
  • Clang/libc++ 7.x 和更新版本:#include <filesystem> 为您提供 std::filesystem,然后您必须与 -lc++fs 链接。

请注意,您需要使用显式构建的 libc++

-DLIBCXX_INSTALL_EXPERIMENTAL_LIBRARY=YES

和/或

-DLIBCXX_INSTALL_FILESYSTEM_LIBRARY=YES

【讨论】:

  • 我有 GCC 8.3.4 但没有 filesystem.h,只有实验性/文件系统
  • @Bačić 这很奇怪,因为例如Debian 软件包有它:packages.debian.org/buster/amd64/libstdc++-8-dev/filelist.
  • 我在这个路径中有文件(usr/include/c++/8...)但是在 Jetbrains Clion 和其他编辑器中,我不能包含文件系统库。我应该为此安装一些东西吗?
  • @Bačić 很抱歉,我无法帮助您使用 CLion,因为我以前从未使用过它。您确定您使用的是 GCC 8 而不是其他编译器版本吗?
  • 我在 Code Blocks 和 Clion 中默认使用 GCC。代码块中也存在问题。当我在终端输入 gcc --v 时,我得到了 8.3.0 版本的 gcc。 Clion 自动检测 c++ 编译器,但问题与它们中的任何一个都相同。
【解决方案2】:

我解决了这个问题。对于所有阅读此问题的人,在 CMakeLists.txt 中,您必须在其他所有内容之前链接库。 CMakeLists.txt 必须是这样的:

cmake_minimum_required(VERSION 3.14)
project(FileSystem)

set(CMAKE_CXX_STANDARD 17)
link_libraries(-lstdc++fs)
add_executable(FileSystem main.cpp Superblok.cpp Superblok.h Inode.cpp Inode.h 
Memory.cpp Memory.h Filesystem.cpp Filesystem.h)

如果你把link_libraries(-lstdc++fs)放在最后,你的代码就不会工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    • 2017-11-12
    • 2022-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多