使用实验/文件系统时未定义的引用

The*_*Alt 5 c++ filesystems gcc undefined-reference

我正在尝试使用代码运行程序在visual studio代码中使用experimental :: filesystem编译一个项目,但是我甚至无法在终端中编译它.

代码如下,来自docs的一个非常简单的测试用法:

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

int main(){
    fs::create_directories("sandbox/a/b");
    cout << "done.";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

用.编译

g++ -std=c++17 $fullFileName && ./a.out -lstdc++fs
Run Code Online (Sandbox Code Playgroud)

在代码运行器配置或只是

g++ -std=c++17 test.cpp -o test -lstdc++fs
Run Code Online (Sandbox Code Playgroud)

在终端中不编译或一般不工作.

它提供的错误是:

/tmp/cco0g7Qf.o: In function `main':
test.cpp:(.text+0x24): undefined reference to `std::experimental::filesystem::v1::create_directories(std::experimental::filesystem::v1::__cxx11::path const&)'
/tmp/cco0g7Qf.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_]+0x64): undefined reference to `std::experimental::filesystem::v1::__cxx11::path::_M_split_cmpts()'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

任何帮助都是apreciated,我正在运行linux并且已经检查以确保我的libstdc ++与我的gcc一起是最新的.

Flo*_*opp 7

以下命令行对我很有用(UCCntu 17.10上的GCC 7.2.0):

g++ -std=c++17 test.cpp -lstdc++fs
Run Code Online (Sandbox Code Playgroud)

请注意,当您在命令行中省略-lstdc++fs或放置它时test.cpp,链接将因undefined reference您观察到的错误而失败.

  • @IronAttorney 我发现我需要 g++ &lt; v10 的链接器标志,但对于 g++ 10,文件系统库似乎完全包含在 libstdc++ 中。无论我是在 {17, 2a, 20} (2认同)