Я использую gcc 7.2 в Ubuntu 16.04, и мне нужно использовать новую библиотеку файловой системы из 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? Кроме того, зачем мне <experimental/filesystem>
вместо <filesystem>
в C++17? Заранее спасибо.
<filesystem>
запланирована в g++ 8: gcc.gnu.org/onlinedocs/libstdc++/manual/ - person Maël Nison   schedule 02.09.2018