如何启用filesystem.h或修复实验性/文件系统?

时间:2019-07-25 08:05:52

标签: c++ c++17 clion

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

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

2 个答案:

答案 0 :(得分:2)

取决于您的编译器,其标准库及其版本,您需要与单独的文件系统库链接:

  • 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

答案 1 :(得分:0)

我解决了这个问题。对于所有阅读此问题的人,必须在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)放在最后,则您的代码将无效。