在 C 17 中使用 <filesystem> 成员的链接错误

新手上路,请多包涵

我在 Ubuntu 16.04 上使用 gcc 7.2,我需要使用 C++17 中的新文件系统库。即使确实有一个名为experimental/filesystem 的库,我也不能使用它的任何成员。例如,当我尝试编译此文件时:

 #include <iostream>
#include <string>
#include <experimental/filesystem>
using namespace std;
namespace fs = std::experimental::filesystem::v1;

int main(){
    fs::path p1 = "/usr/share/";
}

我收到一个编译错误,如下所示:

 $ g++-7 test.cpp -std=c++17
/tmp/ccfsMnlG.o: In function `std::experimental::filesystem::v1::__cxx11::path::path<char [12], std::experimental::filesystem::v1::__cxx11::path>(char const (&) [12])':
test.cpp:(.text._ZNSt12experimental10filesystem2v17__cxx114pathC2IA12_cS3_EERKT_[_ZNSt12experimental10filesystem2v17__cxx114pathC5IA12_cS3_EERKT_]+0x73): undefined reference to `st
d::experimental::filesystem::v1::__cxx11::path::_M_split_cmpts()'
collect2: error: ld returned 1 exit status

我究竟做错了什么?我认为代码没有任何问题,因为我只是从网站上复制粘贴的。我是否使用了错误版本的 gcc?另外,为什么在 C++17 中我需要 <experimental/filesystem> 而不仅仅是 <filesystem> ?提前致谢。

原文由 Willie Jeng 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
1 个回答

添加标志 -lstdc++fs

 $ g++-7 test.cpp -std=c++17 -lstdc++fs

gcc 7.2 仅支持 C++17 实验性 filesystem 命名空间。我不知道,也许 gcc 7.3 已经支持 std filesystem 命名空间。

原文由 273K 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题