即使声明支持,也不能使用`std :: filesystem`

时间:2018-09-20 14:55:06

标签: c++ c++17 std-filesystem

最新版本的GCC和clang支持C ++ 17的std :: filesystem(ref)。

为什么该程序无法编译?

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <filesystem>
namespace fs = std::filesystem;

int main()
{
    fs::create_directories("sandbox/1/2/a");
    fs::create_directory("sandbox/1/2/b");
 //   fs::permissions("sandbox/1/2/b", fs::perms::remove_perms | fs::perms::others_all);
    fs::create_directory("sandbox/1/2/c", "sandbox/1/2/b");
    std::system("ls -l sandbox/1/2");
    fs::remove_all("sandbox");
}

我使用online compiler中最新的编译器版本以及以下编译器选项对其进行了测试:

clang++ prog.cc -Wall -Wextra -std=c++17
g++ prog.cc -Wall -Wextra -std=c++2a

从c中,我得到以下链接器错误:

/tmp/prog-9b6259.o: In function `main':
prog.cc:(.text+0x48): undefined reference to `std::__1::__fs::filesystem::__create_directories(std::__1::__fs::filesystem::path const&, std::__1::error_code*)'
prog.cc:(.text+0xad): undefined reference to `std::__1::__fs::filesystem::__create_directory(std::__1::__fs::filesystem::path const&, std::__1::error_code*)'
prog.cc:(.text+0x12f): undefined reference to `std::__1::__fs::filesystem::__create_directory(std::__1::__fs::filesystem::path const&, std::__1::__fs::filesystem::path const&, std::__1::error_code*)'
prog.cc:(.text+0x1b5): undefined reference to `std::__1::__fs::filesystem::__remove_all(std::__1::__fs::filesystem::path const&, std::__1::error_code*)'
clang-8: error: linker command failed with exit code 1 (use -v to see invocation)
1

如果我将fs :: permissions分解为行,则会出现此编译时错误:

prog.cc:11:49: error: no member named 'remove_perms' in 'std::__1::__fs::filesystem::perms'
    fs::permissions("sandbox/1/2/b", fs::perms::remove_perms | fs::perms::others_all);
                                     ~~~~~~~~~~~^

我从GCC收到类似的错误。

我在做什么错?这些编译器是否可能支持C ++ 17语言,但不完全支持其库?

0 个答案:

没有答案