experimental :: Dateisystem-Linker-Fehler
Ich versuche es mal mit der neuen c++1z Merkmale tatsächlich auf der Leiter der Entwicklung im gcc 6.0.
Wenn ich versuche, dieses kleine Beispiel:
#include <iostream>
#include <experimental/filesystem>
namespace fs = std::experimental::filesystem;
int main()
{
fs::path p1 = "/home/pete/checkit";
std::cout << "p1 = " << p1 << std::endl;
}
Bekam ich:
/opt/linux-gnu_6-20151011/bin/g++ --std=c++1z main.cpp -O2 -g -o gehen /tmp/ccaGzqFO.o: In function \`std::experimental::filesystem::v1::__cxx11::Weg::Weg(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::Weg::_M_split_cmpts()' collect2: Fehler: ld zurückgegeben, 1 exit status
gcc-version ist die snapshot-linux-gnu_6-20151011
Irgendwelche Hinweise, wie der link für das neue c++1z-Funktionen?
InformationsquelleAutor der Frage Klaus | 2015-10-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dateisystem TS nichts zu tun mit C++1z-Unterstützung, es ist eine völlig separate Spezifikation nicht Teil der C++1z working draft. GCC ' s implementation (GCC 5.3 und höher) ist auch verfügbar in C++11-Modus.
Müssen Sie nur den link mit
-lstdc++fs
zu verwenden.(Die relevante Bibliothek,
libstdc++fs.a
ist eine statische Bibliothek, so wie bei jedem statischen Bibliothek kommen sollte nach alle Objekte, die von ihm abhängen, im linker-Befehl.)Update Nov 2017: sowie die Dateisystem-TS, GCC-trunk jetzt auch eine Implementierung der C++ - 17-Dateisystem-Bibliothek, definiert in
<filesystem>
und im namespacestd::filesystem
(N. B. keine "experimentelle" in den Namen) bei der Verwendung von-std=gnu++17
oder-std=c++17
. Der GCC-C++17-Unterstützung ist nicht vollständig oder stabil noch nicht, und bis es bereit für die prime time verwenden, müssen Sie auch einen link zu-lstdc++fs
für die C++ - 17-Dateisystem-Funktionen.InformationsquelleAutor der Antwort Jonathan Wakely
Mit clang 4.0/5.0, müssen Sie link gegen
libc++experimental.a
InformationsquelleAutor der Antwort xaxxon
Hier ist eine demo, die hilfreich sein könnten, um jemand in die Zukunft:
env:
el6
gcc/5.5.0
Den folgenden kompilieren und testen. Die Flaggen sind
-std=c++17
-lstdc++fs
:Funktioniert es auch mit Flaggen:
-std=c++11
Folge hatte, kompilieren Fehler
_ZNSt12experimental10filesystem2v112current_pathB5cxx11Ev
InformationsquelleAutor der Antwort caot