2015-10-15 4 views
30

Я пытаюсь использовать новые функции C++ 1z на самом деле в главе разработки в gcc 6.0.экспериментальная ошибка файловой системы

Если бы я попробовать этот маленький пример:

#include <iostream> 
#include <experimental/filesystem> 
namespace fs = std::experimental::filesystem; 
int main() 
{ 
    fs::path p1 = "/home/pete/checkit"; 

    std::cout << "p1 = " << p1 << std::endl; 
} 

я получил:

 
/opt/linux-gnu_6-20151011/bin/g++ --std=c++1z main.cpp -O2 -g -o go 
/tmp/ccaGzqFO.o: In function \`std::experimental::filesystem::v1::__cxx11::path::path(char const (&) [36])': 
/opt/linux-gnu_6-20151011/include/c++/6.0.0/experimental/bits/fs_path.h:167: undefined reference to `std::experimental::filesystem::v1::__cxx11::path::_M_split_cmpts()' 
collect2: error: ld returned 1 exit status 

НКУ версия снимка линукс-gnu_6-20151011

Любые намеки, как связать для нового C++ 1z функции?

ответ

57

Файловая система TS не имеет ничего общего с поддержкой C++ 1z, это полностью отдельная спецификация, не являющаяся частью рабочего проекта C++ 1z. Реализация GCC (в GCC 5.3 и более поздних версиях) доступна даже в режиме C++ 11.

Вам просто нужно связаться с -lstdc++fs, чтобы использовать его.

(Соответствующая библиотека, libstdc++fs.a, статическая библиотека, так как с любой статической библиотекой, он должен прийти после любых объектов, которые зависят от него в команде компоновщика.)

Обновление ноября 2017: а также файловая система TS, соединительная линия GCC теперь также имеет реализацию библиотеки файловой системы C++ 17, определенную в <filesystem> и в пространстве имен std::filesystem (NB no «экспериментальный» в этих именах) при использовании -std=gnu++17 или -std=c++17. Поддержка GCC C++ 17 еще не завершена или стабильна, и пока она не будет считаться готовой к использованию в прайм-тайм, вам также необходимо будет ссылаться на -lstdc++fs для функций файловой системы C++ 17.

+2

ли это документально в любом месте, я попытался определить это сам и придумал ж/ничего, я не пропустить какой-либо ресурс здесь? –

+1

@ShafikYaghmour, я только что обновил документы: https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#table.ts_status https://gcc.gnu.org/onlinedocs/libstdc++/manual /using.html#manual.intro.using.flags https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dynamic_or_shared.html#manual.intro.using.linkage.experimental (внизу) –

+1

Когда я пытаюсь для этого я получаю ту же ошибку компоновщика. 'C++ -lstd ++ fs main.cpp'. Я использую 'gcc версии 5.3.1 20151207 (Red Hat 5.3.1-2) (GCC)' – alfC

8

С лязгом 4,0/5,0, вам необходимо связать с libc++experimental.a

Смежные вопросы