2015-10-15 12 views
30

Staram się korzystać z nowych funkcji C++ 1z faktycznie na początku programowania w gcc 6.0.eksperymentalny :: linker systemu plików

Gdy próbuję ten mały przykład:

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

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

mam:

 
/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 

wersja gcc jest migawka linux-gnu_6-20151011

Wszelkie wskazówki, jak połączyć na nowy Funkcje C++ 1z?

Odpowiedz

57

System plików TS nie ma nic wspólnego z obsługą C++ 1z, jest to całkowicie osobna specyfikacja, która nie jest częścią roboczą wersji C++ 1z. Implementacja GCC (w GCC 5.3 i nowszych wersjach) jest nawet dostępna w trybie C++ 11.

Musisz tylko połączyć się z -lstdc++fs, aby z niego skorzystać.

(Odpowiedni biblioteka, libstdc++fs.a, jest biblioteka statyczna, tak jak w przypadku każdej biblioteki statycznej powinno pochodzić po żadnych przedmiotów, które zależą od niego w komendzie łącznikową.)

Aktualizacja listopad 2017: a także system plików TS, gałąź GCC teraz również ma implementację biblioteki plików C++ 17, zdefiniowanej w <filesystem> oraz w przestrzeni nazw std::filesystem (nie no "eksperymentalne" w tych nazwach), gdy używa się -std=gnu++17 lub -std=c++17. Obsługa G ++ C++ 17 nie jest jeszcze kompletna ani stabilna, i dopóki nie zostanie uznana za gotową do użycia w prime time, musisz również połączyć się z funkcjami systemu plików C++ 17 pod numerem -lstdc++fs.

+2

Czy to udokumentowane wszędzie, próbowałem ustalić ten sam i wpadł w/niczego, nie tęsknię za jakiś zasób tutaj? –

+1

@ShafikYaghmour, właśnie zaktualizowałem dokumenty: https://gccnu.nu.org/onlinedocs/libstdc++/manual/status.html#table.ts_status https://gcc.gnu.org/onlinedocs/libstdc++/manual /using.html#manual.intro.using.flags https://gc.gnu.org/onlinedocs/libstdc++/manual/using_dynamic_or_shared.html#manual.intro.using.linkage.experimental (na dole) –

+1

Kiedy próbuję aby użyć tego, otrzymuję ten sam błąd linkera. 'C++ -lstd ++ fs main.cpp'. Używam 'gcc version 5.3.1 20151207 (Red Hat 5.3.1-2) (GCC)' – alfC

8

Z dzyń 4.0/5.0, trzeba połączyć przeciwko libc++experimental.a

Powiązane problemy