为什么我不能在g ++ 4.9.2中使用<experimental filesystem =“”>?

时间:2015-05-07 13:54:16

标签: c++ c++11 filesystems g++ libstdc++

我正在尝试使用filesystem。我的-std=c++11 -std=c++1y中有CMakeLists.txt。 GCC版本为4.9.2。但是,我有一个错误:

/home/loom/MyProject/src/main.cpp:5:35: fatal error: experimental/filesystem: No such file or directory
 #include <experimental/filesystem>
                                   ^
compilation terminated.

使用std::experimental::filesystem的正确方法是什么?

1 个答案:

答案 0 :(得分:26)

如果我们查看libstdc++ status,我们会看到他们确实支持文件系统TS:

  

纸|标题|状态

     

........

     

N4100 |文件系统| ÿ

但它说:

  

此页面描述了主线GCC SVN中的C ++ 14和库TS支持,而不是任何特定版本。

并且在Wandbox上尝试此操作时,看起来此库仅在最新的开发分支6.0上可用,除此之外我找不到更多详细信息。

更新

Jonathan Wakely的更新:

  

它现在也可以在Subversion的gcc-5分支中使用,并将在今年晚些时候的GCC 5.3版本中包含。

另外,对于Jonathan Wakely的answer here,我们需要使用-lstdc++fs进行编译。这包含在Linking section of gcc documents

  

GCC 5.3包括技术规范ISO / IEC TS 18822:2015定义的文件系统库的实现。因为这是一个实验性的库扩展,不是C ++标准的一部分,所以它是在一个单独的库libstdc ++ fs.a中实现的,并且它没有共享库。要使用该库,您应该包含并链接-lstdc ++ fs。在非POSIX平台上,库实现是不完整的,特别是Windows支持是基本的。

     

由于Filesystem库的实验性质,ABI稳定性和向后兼容性的通常保证不适用于它。无法保证任何标头中的组件在不同的GCC版本之间保持兼容。

另见Table 3.1. C++ Command Options