【问题标题】:Why can't I use <experimental/filesystem> with g++ 4.9.2?为什么我不能将 <experimental/filesystem> 与 g++ 4.9.2 一起使用?
【发布时间】:2015-07-18 03:39:34
【问题描述】:

我正在尝试使用filesystem。我的CMakeLists.txt 中有-std=c++11 -std=c++1y。 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的正确使用方式是什么?

【问题讨论】:

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


【解决方案1】:

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

纸 |标题 |状态

........

N4100 |文件系统 |是的

但它说:

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

通过在Wandbox 上尝试这个,看起来这个库只在最新的开发分支6.0 上可用,除此之外我找不到更多细节。

更新

来自 Jonathan Wakely 的更新:

它现在也可以在 Subversion 的 gcc-5-branch 中使用,并将在今年晚些时候包含在 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 支持是初级的。

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

另见Table 3.1. C++ Command Options

【讨论】:

  • 它现在也可以在 Subversion 的gcc-5-branch 中使用,并将在今年晚些时候包含在 GCC 5.3 版本中。
  • @JonathanWakely this question 是一个很好的相关问题。
猜你喜欢
  • 1970-01-01
  • 2020-08-26
  • 2013-07-02
  • 2015-11-08
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-21
相关资源
最近更新 更多